[英]what happens when a parent class object takes value of child class object
[英]What happens when parent class object is assigned child class object?
以下代码将输出显示为:
Output:
Animal
Dog
Animal
我很困惑,为什么即使在赋值“ a = b”之后,“ a.type”也输出为“ 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);
}
首先要讲一点。 您在磁贴中声明:
为父类对象分配子类对象时会发生什么?
请了解,您正在将子类对象分配给父类型变量。 这看似挑剔,但这是一个重要的区别,并深入到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());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.