1. 覆盖与重载
1.1 覆盖
- 同名同参同返回叫覆盖(覆盖是父子类之间)。
- 方法重写:也叫做覆盖。子类继承父类时,将父类的成员变量和成员方法一同继承下来成为子类自己的。此时如果该成员变量或者成员方法不是private或者static的,则子类就存在对该成员和方法进行重写的可能。
tips:默认分情况,私有静态构造不继承。
覆盖原则:
- 对于父类中default的成员,如果子类和父类在同一个package中,则子类可以覆盖父类的default成员;如果子类和父类不在同一个package中,则子类不能覆盖父类的default成员。
- 对于父类的构造方法,子类始终无法继承。
- 对于父类中private、static的成员子类始终无法覆盖。
- 子类可以继承的,不一定能够访问;但是只要是子类能够访问的,子类就一定能够覆盖(重写)。
- 子类重写继承自父类的成员和方法,属于java多态性的体现之一。
1.2 重载
- 同名异参叫重载(重载是同一个类里面)。
- 方法重载:同一个类中的相同的方法名称可以实现不同的功能;着重体现在同名方法的参数顺序、参数类型、个数不同。
tips:
- 方法重载也属于java多态性的体现之一。
- 程序调用一个方法,自动根据传递进去的实际参数的类型、个数和顺序等确认调用的是哪一个形态的方法。
1.3 二者区别
- java中同一个类之间,是不允许出现完全相同的方法的。
- 同一个类中,两个方法的名称相同、方法的参数顺序、参数类型和参数个数相同的方法叫做完全相同的方法。
- 对于重载来说,因为是在同一个类中,方法名称相同,所以必须要求方法的参数不同。
- 对于覆盖来说,因为子类覆盖父类的方法,所以必须要求名称相同、参数相同、返回值类型相同,才认为是同一个方法,即覆盖的方法除了方法体中的内容不同外其他的方法结构完全相同。
- 使用方法覆盖、重载的好处是提高代码的复用率,二者都是java多态性的体现。
文档信息
- 本文作者:Marshall