子類繼承父類,父類中的構造器
阿新 • • 發佈:2018-08-24
gen 向上轉型 類構造 復制 使用 article col 成員 ring
子類繼承父類,子類構造器會默認調用super()(無論構造器中是否寫有super()),用於初始化父類成員.同時當父類中存在有參構造器時,必須提供無參構造器,子類構造器中並不會自動繼承有參構造器,仍然默認調用super(),使用無參構造器。
PS:構造器是無法被繼承的,所以不能重寫,但是可以重載。
原因:構造器是生產對象的一個途徑,假如可以被繼承,那麽對象就可以被復制了。子類可以通過繼承構造器產生父類對象,這樣就會出現子類引用指向父類對象,java是不支持向下轉型的,只能向上轉型。
兩種情況:
(一)父類中同時包含無參構造器和有參構造器時
package struct;class parent{ public parent(int a) { System.out.println("我是父類有參構造方法"+a); // TODO Auto-generated constructor stub } public parent() { // TODO Auto-generated constructor stub System.out.println("我是父類無參構造方法"); } public void read(){ System.out.println("我是父類的方法"); } } public class Test extends parent{ public Test() { System.out.println("我是子類的構造方法"); super.read(); } public static void main(String[] args) { Test t = new Test(); } }
當子類的構造器中沒有實現super()方法時,默認在調用子類構造方法之間先調用父類的無參構造方法,輸出的結果為:
我是父類無參構造方法 我是子類的構造方法 我是父類的方法
也可以在子類構造器中使用super(int a)來調用父類的有參構造方法,即將子類的構造器改為:
public Test() { super(5); System.out.println("我是子類的構造方法"); super.read(); }
輸出為:
我是父類有參構造方法5
我是子類的構造方法
我是父類的方法
(二)父類中只有有參構造器時
當父類中只有有參構造器時,默認在子類中需要使用super(父類構造器參數)才能調用父類的有參構造器,可以實現繼承
package struct; class parent{ public parent(int a) { System.out.println("我是父類構造方法"+a); // TODO Auto-generated constructor stub } public void read(){ System.out.println("我是父類的方法"); } } public class Test extends parent{ public Test() { super(3); System.out.println("我是子類的構造方法"); super.read(); } public static void main(String[] args) { Test t = new Test(); } }
輸出為:
我是父類構造方法3
我是子類的構造方法
我是父類的方法
轉自:https://blog.csdn.net/u014800380/article/details/53020085
子類繼承父類,父類中的構造器