java - java中为什么父类会调用子类方法?
问题描述
我有两节课:
public class A {
void add(int a){
System.out.println("A.add");
}
void addAll(int[] a){
System.out.println("A.addAll");
for(int i = 0;i < a.length;i++){
add(a[i]);
}
}
}
public class B extends A{
@Override
void add(int a){
System.out.println("B.add");
super.add(a);
}
@Override
void addAll(int[] a){
System.out.println("B.add");
super.addAll(a);
}
public static void main(String[] args){
(new B()).addAll(new int[]{1,2,3,4});
}
}
当我开始运行这个应用程序时,输出是
B.add
A.addAll
B.add
A.add
B.add
A.add
B.add
A.add
B.add
A.add
为什么addAll
A类中的函数会调用add
B类中的函数而不是调用自己的add
函数?
解决方案
我认为德里克误解了你的意思。Super
确实是指父类(A),但是你可以看到B的函数@override
之前有一个关键字。add
由于它是 B 对象调用addAll
函数 ( new B()
),因此 Aadd
被 B 的add
函数覆盖。因此它首先调用 B 的add
函数,然后调用 A 的add
函数。
推荐阅读
- python - 不间断服务器客户端连接[Python]
- reactjs - 使用 React Hook 后无法在 React.js 中输入文本输入字段
- aws-lambda - 是否可以将所有 Cloudwatch 日志流式传输到 S3 或 EC2 中的文件?
- java - 用Java生成数独
- r - 如何在 R 中对组内的列进行排序?
- android - Android kaptDebugKotlin failed + SQL 错误或缺少数据库(没有这样的表:约会)
- java - 如何制作@Scheduled 注释的动态参数?
- java - 从 2 Arraylist 中删除常用条目
- json - 如何只转换为json可以转换的数据?
- mysql - 如何在express.js中使用mysql将n个输入存储到一个数组中