让
public class A{
public MyType myMethod(){...}
}
和
public class B extends A{
@Override
public MyType myMethod(){...}
}
是任意类。为什么MyType一定是MyAdvancedType的父类型?如果我们允许 MyAdvancedType 可以是任意类型,会发生什么?
最佳答案
我想你指的是第二个示例中的 MyAdvancedType
有一个简单的解释您有以下 LOC:
A a = new B();
现在,当您尝试在对象 a 上调用 myMethod
时,实际上,您将调用 B
类方法中的重写。
现在,重写方法返回一个 MyAnvancedType
对象,但是您在类 A
上调用了该方法,这意味着您所知道的是您可以获得一个对象MyType
。因此,JVM 将 MyAnvancedType
转换为 MyType
,您将使用 MyType
对象,甚至不怀疑您正在使用 我的高级类型
并回答你的第二个问题。即使编译器允许您使用任意类型,您也会得到 ClassCastException
,因为编译器会尝试将 MySomeOtherType
转换为 MyType
关于java - Java 中的重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18864094/