java 中子類調用父類方法,父類中this是怎么調用的,終於清楚了!!!!


1. parent父類與child子類

public class parent {
    public void add(){
        System.out.println("A add...");
    }

    public void addAll(){
        System.out.println("A add ALL...");
        this.add();-----------------------------------------這里調用的是子類

        this.hello();---------------------------------------這里調用的是父類
        System.out.println(this.getClass());
    }
    public void hello(){
        System.out.println("hello");
    }

}
public 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();
    }

}

2. main方法

public class main {
    public static void main(String[] args) {
        child c = new child();---------------------------這里實例化的是子類
        c.addAll();
    }
}

先說一下流程:首先實例化的是子類,自始自終都沒有實例化父類對象,this的簡單理解就是當前對象的引用。然后它調用了子類的addAll()------>通過super關鍵字調用父類的addAll(),然后重點來了父類中的this .add()這里打印出來的this不應該是父類對象,因為子類中重寫了父類的方法盡管父類的方法並沒有失效,但是this會優先因為重寫去子類中尋找add()方法(如果一開始實例化的是父類對象,那么this.add就會自然的調用自身父類的add,這很好理解),第二句this.hello(),因為子類中不存在hello()重寫,也就會到父類自身中去尋找hello()方法。---------總之this關鍵字會優先根據實例化的對象去尋找該對象的方法,父類使用this調用取決於子類中是否有同樣的重寫方法(覆蓋了)。如果沒有就會調用自身的方法。!!!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM