Java Access抽象实例变量

时间:2013-03-27 10:40:50

标签: java abstract-class member-variables

我有一个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
    }
}; 

我做错了什么,我怎样才能实现我想要实现的目标?

4 个答案:

答案 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)

因为您仍在继承/扩展抽象类,除非您将其保护,否则该字段不会被继承。