は、私はJavaで、次の例のクラスを持っている:スーパータイプのコンストラクタを直接呼び出すことはできません - なぜそうではありませんか?
public class A { }
public class Super {
protected Super() { }
public Super(A a) { }
}
public class Sub extends Super { }
public class Consumer {
public Consumer() {
Sub sub = new Sub(new A()); //compiler error
}
}
コンパイラエラーが引数が完全に理解できるサブにおけるデフォルトコンストラクタに適用することはできないと述べています。私は好奇心だ何
は、この決定の根拠です。 JavaはSub
にデフォルトの空のコンストラクタを生成します。なぜこの場面の裏でそれを呼ぶことができないのですか?これは主に純粋な手持ちのケースですか、技術的な理由がありますか?私は、これは言語の制限ですことを承知している
EDIT
。私は興味がありますなぜそれは言語の制限です。
EDIT 2
しばしばそうであるように、私は私が実際に大きな画像を見ることがで働いていたコードに近づきすぎた、ということらしいです。私はこれがBadThing®である理由を示す以下の回答に反例を掲示しました。
私が仕様で見つけることができたのは、それができないということでした。理由についての説明はありませんhttp://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.2 –
ここにJon Skeetが取り上げています。http://stackoverflow.com/questions/1644317/java -constructor-inheritance/1644410#1644410 –
あなたの編集について混乱します。 1つの引数でコンストラクタを呼び出すと、引数のないデフォルトのコンストラクタをその場所で呼び出すことができないのはなぜでしょうか?明らかに、プログラマーは自分のパラメーターを完全に無視するコンストラクターを呼び出そうとしていませんでした。そうでなければ、パラメーターを指定しませんでした。 –