class Animal{
String s;
Animal(String s){
this.s = s;
}
}
class Dog extends Animal{
Animal animal;
Dog(String s) {
super(s);
}
//here is an error "Implicit super constructor Animal() is undefined.Must explicitly invoke another constructor"
Dog(Animal animal){
this.animal = animal;
}
}
私の混乱は、私はすでにスーパークラスにパラメータを持つコンストラクタが1つしかない場合、パラメータを持つすべてのサブクラスのコンストラクタにはsuper(args)が必要ですか?
Dog(String s) {
super(s);
}
にスーパークラスのコンストラクタ-とパラメータを呼んでいるが、私はまだ別のコンストラクタ犬(動物動物)にエラーメッセージが表示されますなぜですか?
この例でコンストラクタメカニズムがどのように機能しますか?
ありがとうございます!
ScaryWombatが言っているように、おそらくあなたは 'Dog(Animal animal)'コンストラクタを望んでいないでしょう。しかし、別の間違いを訂正したい。クラスが2つ以上のコンストラクタを持つことは非常に可能です。ただし、オブジェクトが作成されると、コンストラクタの1つだけが呼び出され、両方が呼び出されることはありません。だから、あなたが書いたように、他のコードが 'new Dog'と言うとき、それは文字列パラメータ_または動物パラメータを持つものと_どちらかを呼び出します。両方ともではありません(あるコンストラクタに他のコンストラクタを呼び出さない限り)。つまり、私はすでにスーパークラスのコンストラクタを呼び出しています... "という文は間違っています。 – ajb
私は、コンストラクタが、特にサブクラスでどのように動作するのかを根本的に誤解していると思います。あなたは戻って、その課題に関するチュートリアルを勉強してください。 – ajb
@ajbありがとう、あなたの答えは本当に多くの助けになります:-) – bruce