繁体   English   中英

为父类对象分配子类对象时会发生什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM