class Dad
{
protected static String me = "dad";
public void printMe()
{
System.out.println(me);
}
}
class Son extends Dad
{
protected static String me = "son";
}
public void doIt()
{
new Son().printMe();
}
函数 doIt 将打印“dad”。有没有办法让它打印“儿子”?
最佳答案
简而言之,不,没有办法覆盖类变量。
您不会覆盖 Java 中的类变量,而是隐藏它们。覆盖是实例方法。隐藏不同于覆盖。
在您给出的示例中,通过在 Son 类中声明名为“me”的类变量,您隐藏了它将从其父类(super class) Dad 继承的具有相同名称的类变量“me”。以这种方式隐藏变量不会影响父类(super class) Dad 中类变量 'me' 的值。
对于您问题的第二部分,关于如何使其打印“儿子”,我将通过构造函数设置值。虽然下面的代码与你原来的问题有很大的不同,但我会写成这样;
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void printName() {
System.out.println(name);
}
}
JLS 在 8.3 - Field Declarations 部分提供了更多关于隐藏的详细信息
关于java - 有没有办法覆盖 Java 中的类变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/685300/