2

我有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

4 回答 4

7

您声明myVariable具有包访问权限,并且您的 2 个类位于不同的包中。因此,该变量对继承类不可见。您可以将其声明protected为可见或将 2 个类放在同一个包中。

public abstract class MyAbstractClass {

    protected int myVariable = 1;

    protected abstract void FunctionThatUsesMyVariable();
}
于 2013-03-27T10:43:41.593 回答
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如果你必须)。或者 - 显然 - 将它们放在同一个包中。

于 2013-03-27T10:44:54.473 回答
1

将您的变量声明为受保护。package-private默认情况下。

于 2013-03-27T10:43:18.087 回答
1

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

于 2013-03-27T10:43:33.117 回答