繁体   English   中英

如果父类和子类具有相同的方法,并且我使用父类的引用来存储子类的对象

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

父类

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”,任何人都可以解释原因。

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

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

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

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

检查此问题以获取更多详细信息。

在java中,当你的子类有一个与父类同名的函数时,它会覆盖它。 在您的实例中,您有一个名为“声音”的父函数。

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

当您将子函数命名为“声音”时,您将覆盖父函数。

public void sound() {
    System.out.println("Woof");
}

因此,每次覆盖父函数时,都会调用子函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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