【发布时间】:2015-12-15 07:18:02
【问题描述】:
请看下面的代码演示,我对转换的继承层次结构有误解。只是下面的示例,正确的结果是 Baz 1 Foo 3。我不知道为什么我们会得到这个答案。
我认为确定 e 的编译时类型是 Object 类型。转换 Foo 时不会发生编译时错误,因为向上转换和向下转换都可以。 Foo 类型也有 .one() 方法。然后考虑运行时类型 Object e = new Baz();并且 Baz 类型可以转换为 Foo 类型,因为在对象的运行时类型之上进行转换是可以的。这样就不会发生运行时并确定输出。我认为强制转换意味着使一种对象类型变成另一种对象类型,因此 e 现在是 Foo 类型,只需检查 Foo 类型中的方法一。我得到“Foo1”。这是错误的。谁能帮我解决这个问题?谢谢!
public class inheritanceHierarchy
public static void main(String[] args) {
class Foo {
public void one() {
System.out.println("Foo 1");
}
public void three() {
System.out.println("Foo 3");
}
}
class Baz extends Foo {
public void one() {
System.out.println("Baz 1");
super.three();
}
public void two() {
System.out.println("Baz 2");
}
}
Object e = new Baz();
((Foo) e).one();
}
}
【问题讨论】:
-
顺便说一句,如果您不在方法中声明类,我认为您的示例会更清晰 - 这是一种非常不寻常的技术。只需将它们声明为单独的顶级类型,理想情况下使您的所有类型都遵循 Java 命名约定。
-
这个问题几乎看不懂,我几乎无法解析它的文字。
标签: java inheritance hierarchy