java 關於 子類 父類構造函數調用

       對於有相當開發經驗的人知道,在類之間存在繼承關係的時候,根據業務需要子類會相應的調用父類的方法,今天咱們就先從構造函數入手,看看子類調用父類的方法情況,爲初學者或者想我這上年紀的程序員做個筆記,以備後查。

 

兩個類(隨便寫的)

/**
 * 父類
 */
public class Parent {

    public Parent()
    {
        System.out.println("Parent   父類  《無參》  構造器 ");
    }

    public Parent(int inNUmP)
    {
        System.out.println("Parent   父類  《有參》  構造器 inNUmP:"+inNUmP);
    }
    public Parent(String inStrP)
    {
        System.out.println("Parent   父類  《有參》  構造器 inStrP:"+inStrP);
    }
}
/**
 * 子類
 */
public class Sun extends Parent {
    public Sun()
    {
        /***
         * 顯示引用和不顯示引用都會加載父類的無參構造器
         * 放到不是代碼最前面會報錯
         */
        //        super();

        System.out.println("Sun  子類 《無參》  構造器");

    }


    public Sun(int inNum)
    {
        /**
         * 在沒有指定父類的有參構造器的情況下,無論顯示還是不顯示調用,父類的無參構造都被調用
         * Parent   父類  《無參》  構造器
         * Sun  子類 《有參》  構造器 inNum:1
         * Sun1 main
         * */
       //super();

        /**
         * 指定父類的有參構造器後,不在調用父類的無參構造器
         *
         * Parent   父類  《有參》  構造器 inNUmP:2
         * Sun  子類 《有參》  構造器 inNum:1
         * Sun1 main
         * */
//        super(2);
        System.out.println("Sun  子類 《有參》  構造器 inNum:"+inNum);

    }


    public Sun(String inStr)
    {
        /**
         * 在沒有指定父類的有參構造器的情況下,無論顯示還是不顯示調用,父類的無參構造都被調用
         * Parent   父類  《無參》  構造器
         * Sun  子類 《有參》  構造器 inNum:1
         * Sun1 main
         * */
        //super();

        /**
         * 指定父類的有參構造器後,不在調用父類的無參構造器
         *
         * Parent   父類  《有參》  構造器 inNUmP:2
         * Sun  子類 《有參》  構造器 inNum:1
         * Sun1 main
         * */
        super(inStr);
        System.out.println("Sun  子類 《有參》  構造器 inStr:"+inStr);

    }
    public static void main(String[] args) {
        System.out.println("----------實例化無參子類----1----------");
        Sun Sun1=new Sun();
        System.out.println("------------實例化有參子類---非顯式調用父類有參構造----2-----------");
        Sun Sun2=new Sun(1);

        System.out.println("------------實例化有參子類---顯式調用父類有參構造----3-----------");
        Sun Sun3=new Sun("顯式調用父類字符串構造函數");

        System.out.println("------------上行無參實例化子類------4------------");
        Parent Sun4=new Sun();

        System.out.println("------------上行有參實例化子類-----非顯式調用父類構造器-5------------");
        Parent Sun5=new Sun(1);

        System.out.println("------------上行有參實例化子類-----顯式調用父類構造器-6------------");
        Parent Sun6=new Sun("上行顯式調用父類《有參》構造函數");
        System.out.println("Sun1 main");

    }

運行子類結果:


----------實例化無參子類----1----------
Parent   父類  《無參》  構造器
Sun  子類 《無參》  構造器
------------實例化有參子類---非顯式調用父類有參構造----2-----------
Parent   父類  《無參》  構造器
Sun  子類 《有參》  構造器 inNum:1
------------實例化有參子類---顯式調用父類有參構造----3-----------
Parent   父類  《有參》  構造器 inStrP:顯式調用父類字符串構造函數
Sun  子類 《有參》  構造器 inStr:顯式調用父類字符串構造函數
------------上行無參實例化子類------4------------
Parent   父類  《無參》  構造器
Sun  子類 《無參》  構造器
------------上行有參實例化子類-----非顯式調用父類構造器-5------------
Parent   父類  《無參》  構造器
Sun  子類 《有參》  構造器 inNum:1
------------上行有參實例化子類-----顯式調用父類構造器-6------------
Parent   父類  《有參》  構造器 inStrP:上行顯式調用父類《有參》構造函數
Sun  子類 《有參》  構造器 inStr:上行顯式調用父類《有參》構造函數
Sun1 main

總結: 1、子類   不顯式的   調用父類指定構造器時,父類的無參構造一定別調用

            2、子類  顯式   調用父類有參構造器時,父類的無參構造將不再被調用。

            3、子類調用父類構造器的super(option)方法必須放在 子類方法的代碼最前端。

 

可以在加些其他方法進行相關驗證,以後再試啦!喜歡幫到需要的人。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章