【发布时间】:2016-05-11 16:36:03
【问题描述】:
我有一个父类和一个子类。
父类有两个子类覆盖的方法。
这是一个例子:
public class May11 extends May11Parent
{
public void m1()
{
super.m1();
System.out.println("3");
}
public void m2()
{
super.m2();
System.out.println("4");
}
}
public class May11Parent
{
public void m1()
{
System.out.println("1");
m2();
}
public void m2()
{
System.out.println("2");
}
}
然后我有一个带有父引用的子对象(子类中的主方法)。我执行m1(),我知道它会转到孩子的m1() 的身体。孩子打电话给家长。家长致电m2()。神奇的是,子和父的 m2() 方法都被执行了。
我的想法是被解雇的是父母的m2()。如果不是父母,那就是孩子!
我认为这可能与多态性有关,但我什至尝试了一个带有子引用的子对象,结果是一样的。我不明白发生了什么事。有什么想法吗??
这是一个不错的截图:
【问题讨论】:
-
当
m1()调用m2()时,由于多态性,只调用了孩子的m2()。但是孩子的m2()用super.m2()语句调用父母的m2()。因此也被称为。 -
在学习编程时需要理解一件重要的事情:没有魔法。对于大多数事情,都有很好的确定性解释。所以新手的教训可以是:如果你观察到某些东西,试着想出解释所观察到的东西的想法(而不是假设某些东西“神奇地坏了”)。
-
@Codebender 知道这是什么!我得到它! :D
-
@Jägermeister 我正在使用“魔术”来准确指出我丢失的位置。当然,我只是想了解没有任何问题!
标签: java inheritance polymorphism