この次のコードのように出力を与える:親クラスオブジェクトに子クラスオブジェクトが割り当てられるとどうなりますか?
Output:
Animal
Dog
Animal
私も代入「A = B」の後に「動物」として、なぜ「a.type」出力混乱しています。それはなぜそうですか?
Dogクラスの中に変数 "String type"を宣言しないと、別の観察がありました。その後、私はのような出力が得られます。
Output:
Dog
Dog
Dog
マイコード:
//Parent class
class Animal {
String type;
public Animal(){
this.type= "Animal";
}
}
//Child class
class Dog extends Animal {
String type;
public Dog(){
this.type ="Dog";
}
}
//Main Class To Test
class TestDog{
Animal a = new Animal();
Dog b = new Dog();
Animal c = new Dog();
a = b;
System.out.println(a.type);
System.out.println(b.type);
System.out.println(c.type);
}
' "親クラスのオブジェクトは、子クラスのオブジェクトが割り当てられたときに何が起こる?"' - *エヘン*、してください親クラスの***変数***に子クラスオブジェクトを割り当てていることを理解してください。これは厄介なように見えるかもしれませんが、それは重要な違いです.JOPがOOPを実装し、* reference *変数をどのように使用するかのコアになります。また、親の型はクラスではないかもしれませんが、インタフェース( "純粋な"型)である可能性があります。 –
親クラスと子クラスの両方に型フィールドを追加しています。しないでください。親にのみ追加してください。それを保護するか、ゲッタとセッタを与える。 –