首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java 父类可以调用子类方法?解决思路

2013-09-13 
java 父类可以调用子类方法?今天看effective java 第14条,其中父类调用了子类的方法,以前学过C++。针对这个

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...");
        //加上下面这句话 你的世界就变的清晰了  肯定就明白了


        System.out.println(this.getClass().getName()); // 打印出来Child 你难道还会不明白么?
        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();
    }
     
}


热点排行