【发布时间】:2014-12-13 02:51:09
【问题描述】:
我目前正在学习我的第一个 Java 课程,并且我们最近讨论了多态性和继承的主题。为了更好地理解事情的工作原理,我尝试了一些事情,我想知道是否有人可以帮助我理解为什么下面的代码给了我输出以及当我们结合继承和覆盖方法时可能出现的问题.
public class AClass {
public void m1() {
System.out.println("A.m1()");
this.m2();
}
public void m2() {
System.out.println("A.m2()");
}
public static void main(String [] args) {
AClass A = new AClass();
BClass B = new BClass();
A.m1();
A.m2();
B.m1();
public class BClass extends AClass {
@Override
public void m2() {
// TODO Auto-generated method stub
System.out.println("B.m2()");
}
}
我得到的输出是:
A.m1()
A.m2()
A.m2()
A.m1()
B.m2()
另外,如果我在 B 类的 m2() 方法中添加 super.m1() 调用,我会收到堆栈溢出错误。有人能告诉我为什么会这样吗?谢谢!
【问题讨论】:
-
m2inBClass调用m1inAClass,后者调用m2,以此类推(无限递归)。 -
感谢您的回复,如果您不介意可以一步一步进行,因为我无法理解为什么我们会有无限递归,为什么会继续跑?
-
调试它并逐步执行代码。
标签: java inheritance polymorphism overriding