私は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()
を呼び出すこととは別に、何も特別なことをしないので、なぜ私はサブクラスのために1つを定義する必要がありますか? Javaコンパイラが子クラスのコンストラクタを定義する必要がある理由は何か特別な理由はありますか?
質問です希望
ようにするためので、あなたのコードは、次の
を必要とします言語のデザイナーであり、このコミュニティではありません。 Javaでは、コンストラクタは継承されません。それは事実です。それ以上のものは推測だろう。 – RealSkeptic
[Javaのコンストラクタの継承]の可能な複製(http://stackoverflow.com/questions/1644317/java-constructor-inheritance) – shmosel
"Javaコンパイラが子クラスのコンストラクタを定義する理由は何ですか? James GoslingとJava標準委員会以外の理由があれば、この方法がより良いと判断したのでしょうか?いいえ、1つではありません。 –