gpt4 book ai didi

java - 在继承中转换一个对象,为什么会输出这个?

转载 作者:搜寻专家 更新时间:2023-11-01 01:25:20 25 4
gpt4 key购买 nike

有类T:

public class T
{
protected String name;
public T(String name)
{
this.name = name;
}
public String toString()
{
return "T:"+this.name;
}
}

G 类:

public class G extends T
{
public G(String name)
{
super(name);
}
public String toString()
{
return "G:" + super.toString();
}
}

当我运行时

G a3 = new G("me");
System.out.println((T)a3)

它打印G:T:me

我不明白为什么。我以为它会打印 T:me。我声称这是因为它被转换为对象 T。因此,使用类 T 的 toString()。但是,我错了。为什么会这样?

我知道类没有好的名字,这是一个关于理解多态和继承的问题,而不仅仅是写我需要的特定代码。

最佳答案

类 G 中的方法 toString() 覆盖了 类 T 中的方法,因此它被选中。编译器使用对象的静态类型来决定使用方法的哪个重载。只有在 T 上定义了两个不同 toString() 方法可供选择,和/或 G 定义了另一个 toString() 以某种方式重载 - 尽管当方法没有参数时这实际上是不可能的。

关于java - 在继承中转换一个对象,为什么会输出这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36456057/

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