[英]How to call private constructor of super class from child class constructor?
[英]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.