一、方法重载

方法重载指在同一个类中,两个或多个方法名称相同,参数类型或参数个数不同。

那么为什么会有这个东西呢,举个栗子,你定义一个add方法,计算两个整数之和,那如果要计算两个浮点数之和,这时就需要重写写一个方法,那就叫它addDouble,那如果计算float类型的呢?叫他addFloat。如果要定义一个方法计算三个int类型的数之和,则需要定义一个方法叫addIntThreeNumber,这样让使用者对于调用方法时很麻烦,本来很简单的一个功能,还需要记住那么多方法名。我们的想法是,调用者只需要使用一个记住一个方法名add,不管你传入什么,都可以很方便给你返回正确的值。

方法重载就可以很轻松的解决这个问题:

public class Test {
    public int add(int a,int b){
        return a+b;
    }
    public double add(double a,double b){
        return a+b;
    }
    public int add(int a,int b,int c){
        return a+b+c;
    }
    
}

方法重载很常见,比如我们经常使用的System.out.println();不论你往里面输入哪种类型的数据,都可以打印出来。(不过若是打印的不是基本类型,输出的值为地址,此时需要重写toString方法)。

二、方法重载的规范

一.方法名一定要相同。
二.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。
1.如果参数个数不同,就不管它的参数类型了!
2.如果参数个数相同,那么参数的类型必须不同。
三.方法的返回类型、修饰符可以相同,也可不同。

三、方法重写

方法重写又称为方法覆盖,方法重写发生在一个类的子类中,当一个子类继承父类的方法时,若子类并不想原封不动的使用父类的方法,那么子类可以写一个与父类方法名称,返回值、参数类型、参数个数都相同的方法,这就叫方法重写。

若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
重写的方法权限要大于等于父类中的方法,且不能重写父类中private修饰的方法,因为private修饰的方法只能在同类中可见。

四、重写的规则

  1. 不能发生在同类中,只能发生在子类中
  2. 重写方法的权限要大于父类中的方法
  3. 不能重写父类中private修饰的方法
  4. static修饰的方法不能重写
  5. 重写的方法返回值一般与父类一致(向上转型除外)