世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。 ——摘自周志明

重载误区

重载陷阱

  • 例子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){
      	//省略
      	}
      }
      
      一般的重写,不会改变传参机制;但是这个特例,子类把父类的方法覆盖了。
    
posted @ 2018-10-16 22:55  白杯与咖啡  阅读(91)  评论(0编辑  收藏  举报