首页 > 解决方案 > 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

为什么addAllA类中的函数会调用addB类中的函数而不是调用自己的add函数?

标签: java

解决方案


我认为德里克误解了你的意思。Super确实是指父类(A),但是你可以看到B的函数@override之前有一个关键字。add由于它是 B 对象调用addAll函数 ( new B()),因此 Aadd被 B 的add函数覆盖。因此它首先调用 B 的add函数,然后调用 A 的add函数。


推荐阅读