【问题标题】:If parent and child class are having same methods and i am using the reference of parent class to store the object of child class如果父类和子类具有相同的方法,并且我使用父类的引用来存储子类的对象
【发布时间】:2021-10-02 01:35:06
【问题描述】:

父类

class Animal {
    public void sound() {
        System.out.println("Grr");
    }
}

儿童班

class Dog extends Animal {
    public void sound() {
        System.out.println("Woof");
    }
}

调用类

class Callings {
    public static void main(String args[]) {
        Animal a = new Dog();
        a.sound();
    }
}

输出是 - “Woof”

我担心的是--> 到目前为止,我已经读到如果我们使用父类引用并将对象指向子类,那么使用父类的引用我们只能访问父类的数据成员和方法,如果这是真的,那么上面代码的输出应该是“Grr”。但是输出是“Woof”,谁能解释一下原因。

【问题讨论】:

  • 除非您在子类中使用super,否则在这种情况下调用将转到子类本身。
  • 这是术语“多态性”的含义

标签: java polymorphism overriding


【解决方案1】:

Dog 知道它是 Dog,即使你称它为 Animal

查看question了解更多详情。

【讨论】:

    【解决方案2】:

    即使您正在为Animal 创建对象,但实例类型为Dog,您也可以创建子类的实例并分配给父类的类型。

    当你调用一个方法时,它应该在父类中定义,如果它在子类中被覆盖,则将调用子方法,否则将调用父类的方法。

    您可以通过使用System.out.println(a.getClass().getName()); 打印实例的类类型a 来检查实例的类型,这将打印Dog

    【讨论】:

      猜你喜欢
      • 2018-12-27
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2012-07-13
      • 2015-06-08
      • 2015-10-11
      • 2020-05-21
      相关资源
      最近更新 更多