Java父類調用被子類重寫的方法


https://blog.csdn.net/zhuoaiyiran/article/details/19489745
1.如果父類構造器調用了被子類重寫的方法,且通過子類構造函數創建子類對象,調用了這個父類構造器(無論顯示還是隱式),就會導致父類在構造時實際上調用的是子類覆蓋的方法(你需要了解java繼承中的初始化機制)。

例子:

public abstract class Father {
    public Father() {
        display();
    }
 
    public void display() {
        System.out.println("Father's display");
    }    
}
public class Son extends Father {
 
    public Son() {
    }
 
    public void display() {
        System.out.println("Son's display");
    }
    
    public static void main(String[] args) {
        new Son();
    }
 
}
輸出為:Son's display
 
這種機制有優點,不過有時也存在問題。
優點:通過繼承相同的父類,初始化子類時,父類會調用不同子類的不同復寫方法,從而實現多態性。
缺點:如果在父類構造函數中調用被子類重寫的方法,會導致子類重寫的方法在子類構造器的所有代碼之前執行,從而導致子類重寫的方法訪問不到子類實例變量的值,因為此時這些變量還沒有被初始化。


免責聲明!

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



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