【发布时间】:2014-02-26 21:14:45
【问题描述】:
我有两个类(A 和 B),B 扩展了 A。
public class A {
protected int i = 1;
}
public class B extends A{
protected int i = 2;
}
在这种情况下,程序写入 1。
A a = new B();
System.out.println(a.i); //1
但如果我在构造函数中赋值 i,它会写 2。
public class B extends A{
public B(){
i=2;
}
}
A a = new B();
System.out.println(a.i); //2
为什么?
【问题讨论】:
-
这叫做隐藏。
-
哪个隐藏,哪个覆盖?
-
你的第一个例子,
B.i隐藏了A.i。没有覆盖字段,只有隐藏它们。 -
字段不能被覆盖。只能覆盖非静态和非私有方法。
-
第二种情况下没有
B.i,只有A.i。
标签: java overriding shadowing