为什么要运行
Larry var3 = new Jerry();
var3.method3();
输出错误而不是
拉里1
哈利1 玛丽3
我认为这可能与创建对象的方式有关。但这只是我的推测。
这是代码:
public class Harry {
public void method1() {
System.out.println("harry 1");
}
public void method2() {
method1();
System.out.println("harry 2");
}
}
public class Larry extends Harry {
public void method1() {
System.out.println("larry 1");
super.method1();
}
}
public class Mary extends Larry {
public void method2() {
System.out.println("mary 2");
}
public void method3() {
super.method1();
System.out.println("mary 3");
}
}
public class Jerry extends Mary {
public void method2() {
super.method2();
System.out.println("jerry 2");
}
}
答案 0 :(得分:1)
使用
((Mary) var3).method3();
它会正常工作。
答案 1 :(得分:0)
Larry var3 = new Jerry(); // casting Jerry to Larry.
var3.method3(); // there is no Larry.method3 method.
// You need downcast object to derived class with method3() defined to call it