日期:2014-05-20  浏览次数:20787 次

java 父类可以调用子类方法?
今天看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...");
        //加上下面这句话 你的世界就变的清晰了  肯定就明白了