【发布时间】:2015-02-17 21:01:33
【问题描述】:
这是我的代码
class Hello{
void method(){
System.out.println("super method");
meth();
}
private void meth(){
System.out.println("sup meth");
}
}
public class HelloWorld extends Hello{
//@Override - would fail as meth is private in Hello
protected void meth(){
System.out.println("sub meth");
}
protected void method(){
super.method();
}
public static void main(String []args){
new HelloWorld().method();
}
}
返回结果是
super method
sup meth
但是为什么?不应该打印出来吗
super method
sub meth
如果我在Hello 中将meth 方法写为public 并在HelloWorld 中覆盖它
结果就是上面提到的一个。
从method 调用meth 仍然调用子类的meth,即使meth 调用在超类内部,从词汇上讲!
那么,当 meth 是 private 时,为什么会有不同的行为呢?
_____________编辑_____________
代码是这样的吗
class Hello{
void method(){
System.out.println("super method");
meth();
}
protected void meth(){
System.out.println("sup meth");
}
}
public class HelloWorld extends Hello{
//@Override - would fail as meth is private in Hello
protected void meth(){
System.out.println("sub meth");
}
protected void method(){
super.method();
}
public static void main(String []args){
new HelloWorld().method();
}
}
o/p 是
super method
sub meth
因此,即使超类 Hello 中的 method 正在调用 meth ,实际上子类的 meth 正在被调用。所以,方法调用不是词法意义上的!即,即使看起来超类的 meth 将被调用,它实际上的子类的 becoz 子类实例首先调用了method。
为什么meth private 在超类中时会有所不同
【问题讨论】:
标签: java inheritance private overriding