作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
public class T
{
protected String name;
public T(String name)
{
this.name = name;
}
public String toString()
{
return "T:"+this.name;
}
}
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/
在 Vaadin 7.0,显示时JavaBean Table 中的数据与 BeanContainer ,用新数据刷新表的正确方法是什么? 最佳答案 该表通过监听器监视表项的属性。如果您通过表的 Ite
首先,我使用的是带有 Axis2 1.6.2 的 eclipse,我正在 tomcat 6 上部署我创建的 Web 服务。Web 服务是在 eclipse 中通过自上而下的方法创建的。 我被要求使对我
我已将 Rails 3.1.1 应用程序升级到 Rails 3.1.3,现在,对于每个请求,它仅响应错误数量的参数(3 for 1)。不幸的是,它没有说明错误在哪里,并且应用程序跟踪为空。我认为存在一
我是一名优秀的程序员,十分优秀!