[英]When we create a constructor in JAVA, is it overloaded or overridden?
在 Java 中,重載是創建具有相同名稱但不同簽名的方法,而覆蓋是創建具有相同名稱和相同簽名的方法。
那么,當我們在 JAVA 的子 class 中創建構造函數時,會發生什么,重載或覆蓋?
兩者都不。 構造函數不同於方法。 您通過在同一個 class 中而不是在繼承的類中編寫多個構造函數來重載構造函數。 並且構造函數不會被覆蓋。 如果我調用new X("Hi")
,我知道我調用的是在X
中定義和實現的構造函數,而不是在X
的某個子類中重寫的構造函數,或者從X
的某個超類繼承的構造函數。
class 由成員(字段或方法)和構造函數組成 - 作為完全不同的事物。 但是你想做一個概念上的比較。
class A {
A() { }
}
class B extends A {
B() {
System.out.println("Bar");
}
}
在 JVM(java 虛擬機)內部,構造函數簽名是A.<init>()
B()
在內部實現為:
int field1;
String field2;
String field3 = null;
int field4 = 42;
B() {
// 1. Explicit or implicit super constructor:
super(); // A.<init>();
// 2. All fields with initialisation:
field3 = null;
field4 = 42;
// 3. The remaining code:
System.out.println("Bar");
}
這看起來像是覆蓋A.<init>()
(雖然@Override
是不允許的),但基本方法被隱式調用(無參數),或顯式調用super(...)
。
重載意味着在 B 中有超過 1 個構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.