Java 如何从抽象类中获取类的变量?

Java 如何从抽象类中获取类的变量?,java,inheritance,Java,Inheritance,如果我有一个抽象类和一个扩展它的类,我如何得到将它扩展到扩展类的类的变量,类似这样: abstract class A { void getVariable () { //get *variable* from class B and print it out } } class B extends A { int variable = 5; } 您不能直接从子类访问变量字段,但可以这样做 abstract class A { abstract

如果我有一个抽象类和一个扩展它的类,我如何得到将它扩展到扩展类的类的变量,类似这样:

abstract class A {
    void getVariable () {
        //get *variable* from class B and print it out
    }
}

class B extends A {
    int variable = 5;
}

您不能直接从子类访问变量字段,但可以这样做

abstract class A {
   abstract int getVariable ();

   void anotherMethod() {

       System.out.println("Variable from child: " + getVariable());
   }
}

class B extends A {
    int variable = 5;

    @Override
    int getVariable() {
        return variable;
    }
}

忘记变量:您可能继承和重写的是行为(=方法)。试试这个:

abstract class A {
    protected abstract int getVariable ();
}

class B extends A {
    private int variable = 5;
    protected int getVariable ()
    {
        return variable;
    }
}   

class C extends A {
    protected int getVariable ()
    {
        return 0; // This class might decide not to define its own variable.
    }
}

变量
只有class
B
知道。它的超类
A
不知道它。如果您将
variable
移动到超类
A
并且没有将其标记为
private
,那么您可以从
B
访问它,这是不可能的,除非
variable
是公共的,并且您确实不想这样做。在我的实际代码中,变量是private int,但它有一个公共getter方法,可以这样做吗?只有当它是一个
公共静态
方法并且变量也是
静态
时,您才应该在子类中实现getVariable谢谢,这看起来像我需要的。“只有一个问题,”Itamar Green在评论中说,变量需要声明为静态,这是否也适用于这种情况?不,它不需要是静态的!你需要学习更多的OOP!