我有一个abstract class
,其变量如下:
public abstract class MyAbstractClass {
int myVariable = 1;
protected abstract void FunctionThatUsesMyVariable();
}
然后当我通过以下代码实例化我的class
时,无法看到myVariable
:
MyAbstractClass myClass = new MyAbstractClass() {
@Override
protected void FunctionThatUsesMyVariable() {
// TODO Auto-generated method stub
}
};
我做错了什么,我怎样才能实现我想要实现的目标?
答案 0 :(得分:7)
您声明myVariable
具有包访问权限,并且您的2个类位于不同的包中。因此,继承类不可见变量。您可以声明protected
访问权限,或将2个类放在同一个包中。
public abstract class MyAbstractClass {
protected int myVariable = 1;
protected abstract void FunctionThatUsesMyVariable();
}
答案 1 :(得分:2)
似乎对我有用:
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
如果必须)。或者 - 很明显 - 将它们放在同一个包装中。
答案 2 :(得分:1)
将您的变量声明为受保护。默认为package-private
。
答案 3 :(得分:1)
因为您仍在继承/扩展抽象类,除非您将其保护,否则该字段不会被继承。