判断下面代码的运行结果是什么?
public class Test {
public static void main(String[] args) {
Base base = new Sub();
base.add(1, 2, 3);
Sub sub = (Sub) base;
sub.add(1, 2, 3);
}
}
class Base {
public void add(int t, int... arr) {
System.out.println("Base");
}
}
class Sub extends Base {
public void add(int t, int[] arr) {
System.out.println("Sub1");
}
public void add(int t, int a, int b) {
System.out.println("Sub2");
}
}
运行结果:
Sub1
Sub2
知识点:
- base对象,对于方法来说,编译看左边,运行看右边。
- 重写父类方法,形参的类型和个数要与父类的被重写的方法相同,因此sub2不算重写,只是sub1的重载。
- 可变形参相当于数组。
- 重载优先匹配形参个数确定的方法。