java - 这是否是动态多态性?
问题描述
程序的输出是A不是它应该是B。如果我将Class A中的方法修饰符更改为public则输出为B。有人可以解释这里发生了什么吗?
代码:
public class HelloWorld {
public static void main(String[] args) {
HelloWorld hw = new HelloWorld();
hw.createInstance();
}
public void createInstance() {
A b = new B();
b.isTrue();
}
public class A {
private void isTrue() {
System.out.println("A");
}
}
public class B extends A {
public void isTrue() {
System.out.println("B");
}
}
}
输出:一个
解决方案
如果isTrue()
在 A 中是公开的,那么isTrue()
在 B 中将覆盖它。(重写意味着如果调用基类中声明的方法,则执行子类中匹配的方法。)
在这种情况下,由于isTrue()
in A 是私有的,因此这两个isTrue()
方法是独立的。私有方法不受覆盖。
由于您正在调用isTrue()
A 类型的变量,因此isTrue()
执行的是 A 中的方法。在这种情况下,私有并不会阻止您访问该方法,因为您的所有代码都在一个类中,HelloWorld
. 如果您的类不是内部(或嵌套)类,那么您将无法从声明它的类外部调用私有方法。
推荐阅读
- python - IMDB 数据集预处理不适合 GLoVe 词嵌入?
- julia - 使用 Juno / Atom 时使用 Debugger 进行调试在 Julia 中不起作用
- angular - Angular 7动态加载@Component
- c# - 如何使用 IIS GetWebConfiguration 获取 .NET Cores 配置?
- docker - 我们如何在 Windows 中导入 docker 数据卷?
- node.js - Sequelize Model Setter set from another property
- python - 将音频块队列传递给 Google 的异步转录选项
- regex - 用于捕获和替换元素 textContent 的正则表达式
- javascript - 来自 PHP 文件的 HTML 按钮值之前有打印“空格”
- c - 发生概率函数