對於有相當開發經驗的人知道,在類之間存在繼承關係的時候,根據業務需要子類會相應的調用父類的方法,今天咱們就先從構造函數入手,看看子類調用父類的方法情況,爲初學者或者想我這上年紀的程序員做個筆記,以備後查。
兩個類(隨便寫的)
/**
* 父類
*/
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)方法必須放在 子類方法的代碼最前端。
可以在加些其他方法進行相關驗證,以後再試啦!喜歡幫到需要的人。