我剛剛開始講述Java的故事,但是我對Python有一些OOP體驗。我有以下的類層次結構:覆蓋java中的子類中的參數化構造函數
class A {
public A() {};
public A(final java.util.Map dict) {};
}
class B extends A {
}
public class Main {
public static void main() {
java.util.Map d = new java.util.HashMap();
B b = new B(d);
}
}
附帶的代碼導致以下錯誤:
Main.java:16: error: constructor B in class B cannot be applied to given types;
B b = new B(d);
^
required: no arguments
found: Map
reason: actual and formal argument lists differ in length
1 error
我的期望是什麼,因爲所需的構造函數在基類中已經定義,是沒有必要定義另一個構造函數。爲什麼我需要爲子類定義一個子類,因爲除了調用super()
之外,他們沒有做任何特殊的事情?有什麼特別的理由,爲什麼java編譯器要我在子類中定義構造函數?
的問題,如「爲什麼語言這種方式工作」只能由回答語言的設計師,而不是這個社區。在Java中,構造函數不會被繼承。這是事實。除此之外的任何事情都是猜測。 – RealSkeptic
[Java Constructor Inheritance](http://stackoverflow.com/questions/1644317/java-constructor-inheritance) – shmosel
「是否有任何特殊原因,爲什麼java編譯器要我在子類中定義構造函數?」你的意思是除了James Gosling和Java標準委員會之外的其他任何理由認爲這種方式更好?不,沒有一個。 –