簡體   English   中英

超類子類構造函數java

[英]Super class Sub class Constructor java

我是Java新手。 在下面的代碼中,我很難理解這些概念。

class A {

    private Integer intr;

    public A(Integer intr) {
        this.inrt = intr;
    }

    public Integer getIntr() {
        return intr;
    }
}

class B extends A {

    public B(Integer intr) { //Eclipse asking me to create this constructor. 
        super(intr);
    }
}

我很困惑為什么我需要創建這種構造函數作為eclipse建議。 那里有什么?

子類的構造函數調用其超類的構造函數(在您的情況下為A )。 如果您的子類B沒有構造函數,編譯器會自動創建一個沒有任何參數的構造函數。 該構造函數自動調用構造函數,不帶基類A參數。

由於基類A具有帶參數的構造函數,因此編譯器不生成沒有參數的構造函數,因此必須在子類B中顯式創建具有單個參數的匹配構造函數。

在B中創建該構造函數的其他替代方法是:

您可以在A中定義一個無參數構造函數:

public A()
{
   this.inrt = 0;
}

這將允許為B自動生成的無參數構造函數來調用A的匹配構造函數。

或者您可以在B中顯式定義一個無參數構造函數來調用A的現有構造函數:

public B()
{
    super(0);
}

如果沒有構造函數,則有默認構造函數,它也調用super的默認構造函數。 但是當您在父級中創建構造函數時,父級中沒有默認構造函數。

實例化A的唯一方法是使用A(Integer)構造函數。 除非超類實現了一個nullary構造函數,否則每個子類都必須在其自構造函數的開頭明確地調用一個超級構造函數。

但是子類構造函數不一定需要完全相同的簽名。 例如,那些也是有效的:

public B() {
    super(42);
    // other B specific stuff
}

public B(Integer i, String s) {
    super(i);
    // other B specific stuff
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM