【发布时间】:2011-12-01 17:39:00
【问题描述】:
public class Example {
public static void main(String args[]){
Parent p = new Child();
p.m2();
}
}
class Parent{
void m1(){
System.out.println("Parent : m1");
m2();
}
void m2(){
System.out.println("Parent : m2");
}
}
class Child extends Parent{
void m1(){
super.m1();
System.out.println("Child : m1");
}
void m2(){
System.out.println("Child : m2");
m1();
}
}
此代码会导致 java.lang.StackOverflowError,因为当调用 Parent 类的 m1() 方法时,它会调用子类的 m2() 方法,因此会导致 StackOverflowError。
Parents m1() 方法中应该改变什么,以便它调用 Parent 的 m2() 方法而不是 Child 的 m2() 方法?
【问题讨论】:
-
如果有人在我工作的地方编写这种代码,我会认真考虑另找一份工作。我真诚地希望这是一种教育练习。
-
希望同学们不要在实际项目中写出这样的代码
-
跟作业没关系。 :)。我刚遇到这个问题,无法找到调用覆盖方法的解决方案。而且我认为这种问题永远不会出现在实际场景中。
-
我仍然不相信这段代码不能从头开始重写 - 支持组合而不是继承..支持组合而不是继承..支持组合而不是继承
标签: java