java - Java 中的重写方法

标签 java overriding

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/

相关文章:

java - 如何在 Jfreechart 中进行鼠标跟踪?

java - Spring 批处理 : Does a scope job exist

c# - 实现后密封接口(interface)

java - 如何使用 Maven 制作 Java EE 6 项目

java - UnsupportedClassVersionError : Bad version number in . 类文件

java - PrintServiceLookup.lookupDefaultPrintService() 返回 null

swift - 您能否在 Swift 中的扩展之间进行覆盖? (编译器似乎很困惑!)

javascript - kendo ui api 覆盖

java - 无法在基元上调用 Equals 方法->重写 Equals 方法不起作用 - Java 中初学者的错误

python - 如何继承和修改销售订单行中的 "Name"- Odoo14