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”的类变量,您隐藏了它从具有相同名称“me”的超类 Dad 继承的类变量。以这种方式隐藏变量不会影响超类 Dad 中的类变量“me”的值。
对于问题的第二部分,即如何使其打印“son”,我将通过构造函数设置该值。尽管下面的代码与您原来的问题有很大的不同,但我会这样写;
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void printName() {
System.out.println(name);
}
}
JLS 提供了有关隐藏部分的更多详细信息8.3 - 字段声明 http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)