java - 将子类转换为超类并调用两个类都具有的函数
问题描述
public class Test3 {
public static void main(String[] args) {
Derived04 b = new Derived04();
Base04 a = (Base04)b;
System.out.println(a.i);
System.out.println(a.f());
}
}
class Base04 {
int i=1;
public int f() {return i;}
}
class Derived04 extends Base04 {
int i = 2;
public int f(){return -i;}
}
这两个类都包含 f() 方法,所以当我将 d 转换为 a 时,当我调用 af() 时它会转到哪个方法?我想既然 a 在你做 ai 时被声明为 Base04 类型,它会给出 1 但为什么它使用子类中的方法?
解决方案
重点是关于实施和铸造。因此,当您创建 a 时,Derived04
您已经实现了一个Derived04
类,而不是它的父类,Base04
所以即使您像这样强制转换它,它也会运行已实现的方法而不是强制转换方法,除非f()
两个类之间存在差异。这不是我们的情况。
推荐阅读
- powershell - 如何使用 PowerShell 从名称不包含 CSV 中列出的字符串的文件夹中删除所有文件
- symfony - 禁用除 API 之外的店面页面
- api - 浏览由 pc 的 localhost 运行的移动设备上的 api
- javascript - 将一条线的位置固定在中心缩放的工作表中
- ios - 如何将 UITextField 清除按钮与 RxSwift 绑定
- python - 如何使用 Selenium 和 Python 从文本节点中检索部分文本
- testing - TYPO3 v10 没有作曲家自动加载的功能测试
- performance - CUDA 内核:循环次数增加 10% 时性能下降 10 倍
- powerapps - Powerapps 集合列合并
- javascript - Angular.js uibModal 数据未传递给组件