gpt4 book ai didi

java - 为什么即使对象被向上转换,Java 也会调用重写的方法?

转载 作者:行者123 更新时间:2023-12-02 10:57:54 26 4
gpt4 key购买 nike

我有以下类(class):

public abstract class Animal
{
private String species;
public Animal(String ll)
{
species = ll;
}

public abstract void speak();

public String toString()
{
return "Species: " + species;
}

}

第二课:

public class Raven extends Animal
{
String name;
public Raven(String emri)
{
super("Raven");
name = emri;
}

public void speak()
{
System.out.println("krra krra");
}

public String toString()
{
return super.toString() + "\nName : "+ name ;
}

}

和测试类:

public class TestAnimals
{
public static void main(String args[])
{
Raven blabla = new Raven("Ziosh");
Animal a = blabla;

System.out.println(a.toString());
}
}

当我执行测试类时,我得到:

Species: Raven
Name: Ziosh

我不明白的是,即使我们将 Raven 对象“向上转换”为 Animal 之后,为什么 Java 仍使用"new"toString() 方法?谢谢。

最佳答案

因为这就是多态性的全部内容:您可以在不知道对象的实际具体类型的情况下调用对象的方法,并且将调用在此具体类型中定义的适当方法。

这就像真实的物体一样:如果我给你一辆车,即使你不知道它实际上是一辆混合动力汽车,当你驾驶它时,这辆车也会表现得像一辆混合动力汽车。

在您的示例中,ablabla 是对同一对象的两个引用,该对象是一个 Raven 实例。所以这个对象像乌鸦一样*说话*和*toString*。

关于java - 为什么即使对象被向上转换,Java 也会调用重写的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24538857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com