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();
}