【发布时间】:2013-01-01 18:11:08
【问题描述】:
这是一段有趣的代码sn-p:
public class Superclass {
public static void main (String[] args){
Superclass obj = new Subclass();
obj.doSomething(); #prints "from Superclass"
}
private void doSomething(){System.out.println("from Superclass");}
}
class Subclass extends Superclass {
private void doSomething(){System.out.println("from Subclass");}
}
我知道子类不会继承其父类的私有成员,但这里 obj 设法调用了它不应访问的方法。在编译时 obj 是 Superclass 类型,在运行时是 Subclass 类型。
这可能与对 doSomething() 的调用发生在驱动程序类内部这一事实有关,该驱动程序类恰好是它自己的类(以及为什么可以首先调用 doSomething() 的原因)。
所以问题归结为,obj 如何访问其父级的私有成员?
【问题讨论】:
-
看看子方法公开时会发生什么会很有趣。我已经做到了,它说:“来自超类” 有趣,它不会覆盖它
标签: java inheritance private