java - 为什么这不打印 "super"?

标签 java polymorphism

我有这个代码:

public class Superclass {

    public void print() {
        System.out.println("super");
    }
}

public class Subclass extends Superclass {

    public void print() {
        System.out.println("sub");
    }
}

然后是这个:

Subclass obj4 = new Subclass();
((Superclass) obj4).print();

我认为上面的打印语句打印“super”,因为它被转换为父类(super class),但事实并非如此 - 它打印“sub”。这是为什么?

最佳答案

类型的向上转型并没有什么不同。调用哪个 toString()实例的运行时类型决定,而不是引用。

由于 Subclass 覆盖了 Superclass 的 toString,因此调用任何 Subclass 实例将始终解析为 Subclass 的到字符串。

Object obj = new Subclass();
obj.toString();  // will still return "sub"

关于java - 为什么这不打印 "super"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19172157/

相关文章:

java - 如何将表单输入值从jsp页面传递到java类?

python - 概括类方法,根据条件执行略有不同的操作

java - 泛型困惑

java - Java Card 中的 Exp 文件和小程序依赖项

java - 如何使用 Maven 添加 Postgresql jdbc 驱动程序 9.2-1003-jdbc3?

java - 用于打印客户对象的数组列表

java - 从具有相同名称的线程中调用父方法

ruby-on-rails - Rails has_many 通过多态计数器缓存

java - 使用 Jackson 进行多态反序列化,而 'type' 和 'value' 是单独的字段

java - Apache Spark 聚合键的工作原理