方法重载和方法覆盖的区别:
方法重载:Overload
方法覆盖:Override
两者本身一点关系都没有,仅仅只是因为名字很像。
方法重载:Overload
作用:解决了同一个类中,相同的功能方法名不同的问题,既然是相同的功能,那么方法的名字就应该相同
规则:(两同一不同)
方法覆盖:Override
作用:解决子类继承父类之后,可能父类的某一个方法不满足子类的具体特征,此时需要重新在子类中定义该方法,并重写方法体。
方法覆盖:当子类拓展了父类,可以获得父类的部分方法和成员变量。可是当父类的某个方法不适合子类本身的特征时,此时子类需要重新定义父类的方法,并重写方法体,这就叫方法覆盖(Override)。
规则:一同两小一大
一同:
1、实例方法签名必须相同。(方法签名=方法名+方法参数列表)
两小:
1、 子类方法的返回值类型是父类方法的返回值类型相同或者是其子类,子类可以返回一个更具体的类;
2、子类方法声明抛出的异常类型和父类方法声明抛出的异常类型相同或者是其子类。
一大:
1、 子类方法的访问权限比父类方法的访问权限更大或相等。(private修饰的方法不能被子类所继承,也就不存在覆写的概念)。
方法重载:Overload
方法覆盖:Override
两者本身一点关系都没有,仅仅只是因为名字很像。
方法重载:Overload
作用:解决了同一个类中,相同的功能方法名不同的问题,既然是相同的功能,那么方法的名字就应该相同
规则:(两同一不同)
同类中,方法名相同,方法参数列表不同(参数类型、参数个数、参数顺序)
下图就是JDK自带的工具类Arrays里的方法重载:可以看出,方法名是相同的,只是参数不一样
方法覆盖:Override
作用:解决子类继承父类之后,可能父类的某一个方法不满足子类的具体特征,此时需要重新在子类中定义该方法,并重写方法体。
方法覆盖:当子类拓展了父类,可以获得父类的部分方法和成员变量。可是当父类的某个方法不适合子类本身的特征时,此时子类需要重新定义父类的方法,并重写方法体,这就叫方法覆盖(Override)。
规则:一同两小一大
一同:
1、实例方法签名必须相同。(方法签名=方法名+方法参数列表)
两小:
1、 子类方法的返回值类型是父类方法的返回值类型相同或者是其子类,子类可以返回一个更具体的类;
2、子类方法声明抛出的异常类型和父类方法声明抛出的异常类型相同或者是其子类。
一大:
1、 子类方法的访问权限比父类方法的访问权限更大或相等。(private修饰的方法不能被子类所继承,也就不存在覆写的概念)。
鉴别是否是覆写方法的必杀技:@Override标签,若方法是覆写方法,在方法上贴上该标签,编译通过;否则,编译出错。只有方法存在覆盖的概念,字段没有覆盖。
下图是方法覆盖的一个简单的例子:参考一下