以下代码将输出显示为:
Output:
Animal
Dog
Animal
我很困惑为什么“a.type”即使在赋值“a = b”之后输出为“Animal”。为什么会这样?
另一个观察是我在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);
}
答案 0 :(得分:0)
首先是一个教学点。你在你的瓷砖中陈述:
为父类对象分配子类对象会发生什么?
请理解您正在将子类对象分配给父类型变量。这可能看起来很挑剔,但它是一个重要的区别,并且涉及Java如何实现OOP并使用引用变量的核心。父类型甚至可能不是一个类,但可以是一个接口("纯"类型)。
至于你的困惑,你要在父类和子类中添加一个类型字段。不要,因为田地没有被覆盖。仅将其添加到“父级”。保护它或给它吸气剂和制定者。
例如:
class Animal {
private String type;
public Animal() {
this.type = "Animal";
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
// Child class
class Dog extends Animal {
String type;
public Dog() {
setType("Dog");
}
}
// Main Class To Test
class TestDog {
public static void main(String[] args) {
Animal a = new Animal();
Dog b = new Dog();
Animal c = new Dog();
a = b;
System.out.println(a.getType());
System.out.println(b.getType());
System.out.println(c.getType());
}
}