java - 这个向上转换的演示如何工作?
问题描述
我创建了一个向上转换的演示,我不明白这段代码是如何工作的,或者我可以更具体地说明为什么在派生类完成调度时还要调用基类的构造函数。甚至没有调用基类的构造函数。我什至没有在任何地方使用超级关键字,而不是如何调用基类的构造函数。
class Base{
int value =0;
Base(){
addValue();
}
void addValue(){
value+=10;
}
int getValue(){
return value;
}
}
class Derived extends Base{
Derived()
{
addValue();
}
void addValue(){
value+=20;
}
}
class Test{
public static void main(String args[]){
Base b=new Derived();
System.out.println(b.getValue());
}
}
解决方案
当你创建一个新Derived
对象时,它的构造函数将被调用。由于Derived
有一个超类Base
,它的构造函数将首先被调用。在构造函数中,addValue
将调用被覆盖的方法,这导致临时值 20。之后,调用addValue
ofDerived
并将另一个 20 添加到value
. 最终结果为 40。
由于您没有使用super
自己调用超类的构造函数,Java 会自动执行此操作:
Derived() {
super();
addValue();
}
推荐阅读
- python - 如何创建输入形状 = 输出形状的自动编码器模型
- c - 在测试我的冒泡排序算法时,控制台会在一秒钟后关闭
- javascript - 递归序列化对象
- javascript - 不和谐机器人如何向用户发送具有随机名称的文件?
- mongodb - 我想在 mongodb 中按月从 JAN-DEC 返回值的总和
- javascript - 反应重新渲染不显示更新的状态数组
- r - 如何用学生 ID 命名 nops_eval 生成的 html 文件?
- mysql - Nodejs mysql2没有抛出连接或查询错误
- exiftool - 使 ExifTool overwrite_original 是事务性的和原子的?
- php - Symfony 日期到字符串的转换