重载误区
重载陷阱
-
例子1 出现了重载还是重写?
class Father{ public void test(){ System.out.println("父类的无参无返回值的方法"); } } class Son extends Father{ public void test(String info){ System.out.println("子类的有参无返回值的方法:" + info); } } 首先确定的是,一定不是重写,因为参数不一致。其次,重载的定义是发生在同一个类中的两个或多个方法,子类继承来的方法此时构成的是非严格意义的重载。子类两个test方法都能调用。
-
例子2
public static void test(int... args){ //省略代码 for (int i = 0; i < args.length; i++) { } } //调用时,必须给一个int[]类型的实参 public static void test(int[] args){ //省略代码 } 编译报错。原因因为int...,编译时,按照数组处理的,只不过它比数组更灵活。也就是说,编译器认为定义了两个相同的方法。 test(int... args)可以接受0~n个int的数值,或者是int[] test(int[] args)只可以接受int[]
-
例子3 特殊的重写
class Fu{ public void test(int... args){ //省略 } } class Zi extends Fu{ //特殊的重写,int[]把int...特性覆盖掉了 @Override public void test(int[] args){ //省略 } } 一般的重写,不会改变传参机制;但是这个特例,子类把父类的方法覆盖了。