1. 程式人生 > >子類繼承父類,父類中的構造器

子類繼承父類,父類中的構造器

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

子類繼承父類,父類中的構造器