子类怎样调用父类方法

 我来答
雨后余清
2017-08-07 · 人间行路难,踏地出赋租。
雨后余清
采纳数:268 获赞数:3255

向TA提问 私信TA
展开全部
public class SuperTest {  
    public static void main(String[] args) {  
        Parent c = new Parent();  
        c.addAll();  
    }  
}  
  
class Parent{  
    public void add(){  
        System.out.println("A add...");  
    }  
      
    public void addAll(){  
        System.out.println("A add ALL...");  
        add();  
        //在父子类之间,如果在父类中使用this关键字,那么运行子类时如果走到this行,指的是子类而不是父类。  
        //谁调用,this就是指谁  
        System.out.println(this.getClass());  
    }  
}  
  
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()方法。。。

这里涉及到的问题是当子类调用super走到父类的方法中,这时的对象this到底是指Child子类还是父类Parent? 

正确答案是子类,this.add();其中的this是指当前对象,也就是Child c = new Child();中的c.

因此虽然是在父类中执行的add方法,但实际上执行的是子类的add方法

在父类的add 方法中

System.out.println(this.getClass());  

结果是Child而不是Parent!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式