我试图将 hello
方法放在基类 A
中,我希望它显示 x
的值,即在子类中设置。
hello
方法永远不会被 A
的实例调用 - 此类是纯基类,永远不会实例化。
x
变量是一个分类器,用于标记从何处调用 hello 方法(该值实际上保存到数据库中);
如果在子类中调用hello
,如何保证x
的值是子类中设置的值?
public class A{
protected static String x = "A";
public void hello(){
System.out.println(x);
}
}
public class B extends A{
protected static String x = "B";
//...
hello();
}
public class C extends A{
protected static String x = "C";
//...
hello();
}
最佳答案
你不能。您正试图从字段中获取多态行为,但它们根本就没有多态行为。 hello()
中的 x
在编译时绑定(bind)到 A
中的字段。
如果你想要多态行为,你需要引入一个非最终(可能是抽象的)方法并在每个子类中覆盖它。然后 hello()
可以调用这个方法,多态性将确保调用正确的覆盖。当然,hello()
不能是 static 方法,因为多态性也不适用于静态方法...方法调用的目标(您的对象调用它)将决定使用的实现。
关于java - 您如何确保继承的静态字段始终从子类而不是基类获取其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7148575/