簡體   English   中英

Java:如何在子類構造函數中調用超類構造函數?

[英]Java: How does a call to the super class constructor inside of a child class constructor work?

我只是想弄清楚這個。 假設我有以下超類 Geometry 的構造函數:

public Geometry(double x, double y)
    {
        this.position = new Point(x,y);
        this.collisionMesh = new ArrayList<Point>();
        this.displayMesh = new ArrayList<Point>();
    }

Geometry 具有成員 position、collisionMesh 和 displayMesh,其所有子類都將繼承這些成員。

現在,我有一個子類 Particle。 以下是有效的構造函數:

public Particle(double x, double y)
{
   super(x,y);
   this.collisionMesh.add(this.position);
   ...
}

我想確保的是:對 super(x,y) 的調用會自動實例化我的子對象的 ArrayLists 和 Point,因此我不需要這樣做。

此外,在更深層次上,假設我可以做到這一點,這里到底發生了什么? 感覺就像我在構造函數內部調用構造函數。 如果 Particle 對象尚未構建完成,那么在調用 super 期間構建的是什么?

要生成對象,您需要調用超類的構造函數。 它必須在構造函數的第一行。 如果您不添加該行,java 將自動調用不帶參數的超類構造函數(就像有一個 invsible super() )。 這可以追溯到類 Object 本身。 這樣,當您構造一個對象時,您有意(或者如果您不編寫 super() 則不會)調用所有超類的構造函數。

如果超類沒有無參數構造函數,如果您不使用正確的參數調用超構造函數(因為這不能自動工作),您將在子類中得到編譯錯誤。

創建類型 Particle 時,它​​首先創建一個 Object,然后將該對象擴展為 Geometry,然后擴展為 Particle。 我希望我能正確解釋它;)

暫無
暫無

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

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