方法的重载和重写

方法的重载

        * 重载就是在一个类中,有相同的函数名称,但形参不同的函数。
        * 方法的重载的规则: 
              * 方法名称必须相同。
              * 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。
              * 方法的返回类型可以相同也可以不相同。
              * 仅仅返回类型不同不足以成为方法的重载。
        * 实现理论:
              * 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对
                应的方法,如果匹配失败,则编译器报错。
        * 实例:
              public class Demo03 {
                  public static void main(String[] args) {
                      int add = add(1, 2, 3);
                      System.out.println(add);
                      double add1 = add(1.2, 2.3);
                      System.out.println(add1);
                  }

                  public static int add(int a, int b) {
                      return a + b;
                  }

                  public static double add(double c, double d) {
                      return c + d;
                  }

                  public static int add(int a, int b, int c) {
                      return a + b + c;
                  }
              }

方法的重写

        * Java程序中类的继承特性可以产生一个子类,子类继承父类就拥有了父类的非私有的属性(方法和变量),在子类中可以增加自己的属性(方法和变量),
          同时也可以对父类中的方法进行扩展,以增强自己的功能,这样就称之为重写,也称为复写或者覆盖。所谓方法重写就是子类的方法和父类中继承下来的方
          法具有完全相同的方法名、返回值类型、方法的参数个数以及参数类型,这样才能被称为方法重写。
        * 重写规则:
              1.子类方法的参数列表必须和父类中被重写的方法的参数列表相同(参数个数和参数类型),否则只能实现方法的重载。
              2.子类方法的返回值类型必须和父类中被重写的方法返回值类型相同,否则只能实现方法重载。
              3.在Java规定,子类方法的访问权限不能比父类中被重写的方法的访问权限更小,必须大于或等于父类的访问权限。
              4.在重写的过程中,如果父类中被重写的方法抛出异常,则子类中的方法也要抛出异常。但是抛出的异常也有一定的约束--->子类不能抛出比父类更多
                的异常,只能抛出比父类更小的异常,或者不抛出异常。例如:父类方法抛出Exception,那么子类就只能抛出IOException或者抛出比Exception小
                的异常或者不抛出异常。
        * 实例:
              public class Person {

                  public void say(){
                      System.out.println("Person说话");
                  }
              }

              public class Student extends Person {

                  @Override
                  public void say() {
                      //super.say();
                      System.out.println("Student读书");
                  }

                  public static void main(String[] args) {
                      Student student = new Student();
                      student.say();
                  }

              }
        * 运行结果:Student读书
        * 可以看出:子类重写父类的方法后,在实例化子类的时候则调用的是子类中的方法,父类的方法就如同被覆盖了一样。如果在子类中需要调用父类的方法,
          则在子类方法中使用super关键字调用父类的方法,格式:super.父类中的方法名(参数列表)。
posted @ 2020-07-01 10:30  han_sh_zh  阅读(319)  评论(0编辑  收藏  举报