Java访问抽象实例变量
我有一个Java访问抽象实例变量,java,abstract-class,member-variables,Java,Abstract Class,Member Variables,我有一个抽象类,其变量如下: public abstract class MyAbstractClass { int myVariable = 1; protected abstract void FunctionThatUsesMyVariable(); } 然后,当我通过以下代码实例化我的类时,myVariable无法看到: MyAbstractClass myClass = new MyAbstractClass() { @Override prot
抽象类
,其变量如下:
public abstract class MyAbstractClass {
int myVariable = 1;
protected abstract void FunctionThatUsesMyVariable();
}
然后,当我通过以下代码实例化我的类时,myVariable
无法看到:
MyAbstractClass myClass = new MyAbstractClass() {
@Override
protected void FunctionThatUsesMyVariable() {
// TODO Auto-generated method stub
}
};
我做错了什么?如何实现我试图实现的目标?将您的变量声明为受保护的。默认情况下,它是包私有的。因为您仍然在对抽象类进行子类化/扩展,并且除非您对其进行保护,否则该字段不会被继承。您正在声明myVariable
具有包访问权限,并且您的两个类驻留在不同的包中。因此,该变量对继承类不可见。您可以使用protected
access将其声明为可见,或者将这两个类放在同一个包中
public abstract class MyAbstractClass {
protected int myVariable = 1;
protected abstract void FunctionThatUsesMyVariable();
}
似乎对我有用:
public class Test {
public static abstract class MyAbstractClass {
int myVariable = 1;
protected abstract void FunctionThatUsesMyVariable();
}
public void test() {
MyAbstractClass myClass = new MyAbstractClass() {
@Override
protected void FunctionThatUsesMyVariable() {
myVariable = 2;
}
};
}
public static void main(String args[]) {
new Test().test();
}
}
我怀疑您在不同的包中声明了这两个类。如果这是您想要的,那么您应该将变量设置为protected
(或者public
,如果必须的话)。或者-显然-将它们放在同一个包中。只有当两个类在不同的包中时才是这样。谢谢,您的答案是正确的。还有一个问题myVariable
是一个文件
,现在它抱怨局部变量可能尚未初始化
,但构造函数确实初始化了它?如果我在一个普通类中这样做,它不会抱怨,为什么会在这里呢?发布两个类的确切代码,并指出编译器抱怨的行。但我认为这应该是另一个问题。
public abstract class MyAbstractClass {
protected int myVariable = 1;
protected abstract void FunctionThatUsesMyVariable();
}