Java中的重载和重写区别

来源:互联网 发布:江南大学网络教育平台 编辑:程序博客网 时间:2024/06/06 08:47

1.重载(overload)

  java中的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同参数列表(不同表现在参数个数和参数类型上)。也可以在子类中重载父类方法。需要注意的是,不能仅仅通过返回值不同来实现重载(注意“仅仅”两字)。

2.重写(override)

  若子类中的某一方法和父类中的某一方法具有相同的方法名、返回类型和参数列表,则新方法将覆盖父类中的方法。此时如果new出来的是子类对象,不管引用是父类还是子类,调用该方法时执行的都是覆盖后的方法。另外,可以通过添加@Override注解来检测重写,若未能正确重写父类方法,则编译器会报错。


示例代码:

[java] view plain copy
  1. class Super{
    public void a(){

    }

    public void a(int a,int b){ //一般的重载

    }

    public int b(){
    return 0;
    }

            /*public long b(){      //编译错误,不能仅仅通过返回类型不同来进行重载
    return 1;
    }*/

    public long b(int a){   //编译通过,因为参数列表不同,满足重载条件,此时返回类型可任取
    return 1;
    }
    }


    class Child extends Super{
    public int a(int a,int b,int c){  //子类通过不同的参数个数重载父类方法
    return 2;
    }

    public long b(String a){  //子类通过不同的参数类型重载父类方法
    return 2;
    }

    @Override
    public int b(){   //子类重写父类方法
    return 3;
    }

    public int superb(){ //显示调用父类中被覆盖的方法
    return super.b();
    }

    /*@Override
    public int b(int a, int b){  //编译不通过,因为没有按照要求来重写父类方法,此处其实只是在进行重载
    return 4;
    }*/
    }


    public class Test {
    public static void main(String[] args) {
    Super sup = new Super();
    Super sup2 = new Child();
    Child child = new Child();
    System.out.println(sup.b());  //创建的是父类,调用的仍然是父类的方法
    System.out.println(sup2.b()); //父类引用子类,调用的是子类覆盖后的方法(这就是List对象
          //能够正确调用ArrayList类重写后的方法的原理)

    System.out.println(child.b()); //创建的是子类,调用的是子类覆盖后的方法
    System.out.println(child.superb()); //在子类中显式的调用被覆盖的父类方法
    }
    }
    /* 输出: 0 3 3 0
    其中0是父类方法的返回值,3是子类重写后的方法的返回值
    */  




结论:重载时最重要的是注意,参数列表一定不能相同!此时返回类型是否相就无所谓了。
原创粉丝点击