Java开发之道
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

谬误16 一字之别——重载就是重写

在面向对象的编程语言中,重载方法和重写方法是两个非常重要的概念,写程序时经常用到。但有一些人经常混淆这两个概念,这两个概念的名称虽然只有一字之差,但实际的含义却大不相同。下面将对这两个概念进行详细区分。

在Java语言中,重载方法是指在类中有两个或两个以上的同名方法,但各个方法中的参数类型、参数个数或顺序不同,示例代码如下:

    public class Test {
    //一个int类型参数
    public int Addition (int x){
      return x + x;
    }
    //两个int类型参数
    public int Addition (int x, int y){
      return x + y;
    }
    //两个float类型参数
    public float Addition (float x, float y){
      return x + y;
    }
    //一个int类型参数和一个float类型参数
    public float Addition (int x, float y){
      return x + y;
    }
    //一个float类型参数和一个int类型参数
    public float Addition (float y, int x){
      return x + y;
    }
    }

注意

在编写重载方法时,要注意方法名的唯一性,方法签名由方法的名称、参数类型(包括顺序,按照从左到右的顺序)、参数个数及参数种类(值、引用或输出)组成。

在Java语言中,重写是指子类中含有与父类相同的方法名和参数,但是子类中的方法覆盖了父类中的方法,例如,父类的代码如下:

    /**
    * 父类方法
    * @author CHUNBIN
    *
    */
    public class FatherClass {
    public void test (){
        System.out. println ("父类中的方法");
    }
    }

子类中未重写父类方法的代码如下:

        /**
        * 子类
        * @author CHUNBIN
        *
        */
        public class SonClass extends FatherClass {
        public static void main (String[] args){
          SonClass son = new SonClass ();
          son. test ();
        }
    }

执行上述代码后,程序运行的效果如图4.13所示。

图4.13 子类中未重写父类方法输出的信息

在子类中重写父类的方法,代码如下:

    /**
    * 子类
    * @author CHUNBIN
    *
    */
    public class SonClass extends FatherClass {
        public void test (){
            System.out. println ("子类中的方法");
        }
        public static void main (String[] args){
            SonClass son = new SonClass ();
            son. test ();
        }
    }

执行上述代码后,程序运行的效果如图4.14所示。

图4.14 子类重写父类方法后输出的信息

从上面的概念论述及程序代码的具体应用中可以看出,重载方法与重写方法是两个完全不相同的概念。