今天看effective java 第14条,其中父类调用了子类的方法,以前学过C++。针对这个例子一直理解不了,希望高手解释下。。。
public class SuperTest {
public static void main(String[] args) {
Child c = new Child();
c.addAll();
}
}
class Parent{
public void add(){
System.out.println("A add...");
}
public void addAll(){
System.out.println("A add ALL...");
this.add();
}
}
class Child extends Parent{
@Override
public void add() {
// TODO Auto-generated method stub
System.out.println("B add...");
super.add();
}
@Override
public void addAll() {
// TODO Auto-generated method stub
System.out.println("B add ALL...");
super.addAll();
}
}
最后输出的结果是
B add ALL...
A add ALL...
B add...
A add...
按我的理解,super.addAll()方法调用来Parent中的addAll(),而Parent中的addAll()调用了add()。这里的add最后调用的是Child的add(),既然是super.addAll(),为何最后竟然调用的是子类的add()方法。。。
当真迷糊了,忘高手解答下。。 谢谢
java??父类?子类?覆盖?方法
------解决方案--------------------
this.add();
其中的this是指当前对象,也就是Child c = new Child();中的c.
这样应该明白了吧!
------解决方案--------------------
public class SuperTest {
public static void main(String[] args) {
Child c = new Child();
c.addAll();
}
}
class Parent{
public void add(){
System.out.println("A add...");
}
public void addAll(){
System.out.println("A add ALL...");
//加上下面这句话 你的世界就变的清晰了 肯定就明白了