java,父类方法中存在可变形参,子类方法中存在同类型的数组形参

问题描述:

在重新学习java多态的过程中,遇到一个问题,具体代码如下,父类形参是int类型的可变形参,子类的是int类型的数组形参,在调用过程中,传入三个int类型的实参,调用的是子类的方法。一开始以为这是重载,一直没想明白为什么调用的是子类的方法,最后才想明白是重写

//考查多态的笔试题目:
public class test {

    public static void main(String[] args) {
        Base base = new Sub();
        base.add(1, 2, 3);   //sub_1

    }
}

class Base {
    public void add(int a, int... arr) {
        System.out.println("base");
    }
}

class Sub extends Base {

    public void add(int a, int[] arr) {
        System.out.println("sub_1");
    }
}

解决

由于编译时,是把变量 base 看做成父类 Base 类型,因此传入的三个实参,后两个当作时可变形参传入,而可变形参在编译时会转换成一个数组形参,因此与子类的add()方法的参数一样,所以是重写方法。

出现这个问题纯粹是由于本人的可变形参的知识不够痛彻,吸取教训!!

你可能感兴趣的:(java,开发语言,jvm)