1.何为继承?
- 作用是降低代码的冗余度,提高编程效率
- 子类继承父类的成员(变量、方法、内部类和构造方法),同时子类还可以拓展、重写。
- 注意:仅继承public和protected,但同一个包中的子类可以在内部通过 “super.xxx” 访问被 (default / friendly) 修饰的成员。
2.继承的规则
2.1.类的单继承和多级继承
对于Java的类,一个子类只能继承自一个父类
但可以多级继承
// 允许多级继承
public class A {...}
public class B extends A {...}
public class C extends B {...}
2.2.接口间的多继承
接口与接口之间是允许多继承的,也允许多级继承。
// 接口允许多继承
public interface A1 {...}
public interface A2 {...}
// 子级接口同时继承两个父级接口
public interface B extends A1, A2 {...}
public interface BImpl1 implements B {...}
public interface BImpl2 implements B {...}
3.重写(覆写、覆盖)
-
若父子类的成员变量同名,或成员方法签名以及返回值一致,就会重写。此时在创建子类对象后,将优先访问子类的变量或方法。
-
若希望在子类对象中访问被重写的父类成员,需要使用super关键字。
-
推荐在重写方法上使用@Override,当java代码被编译的时候会进行有效性检验,判断父类中是否有签名一致的方法。若不存在将不会通过编译。
-
父类返回值类型 >= 子类返回值类型
-
父类访问权限 >= 子类访问权限
4.构造方法的继承规则
- 在子类构造方法第一行使用super( ),将调用父类的(重载)构造方法。
- 若子类没有定义构造方法,或构造方法中没有写super( ) / super(param),系统会自动执行super( )。这意味着在创建子类对象时,必定会调用父类构造方法。
5.继承的应用场景
6.多态
- 继承extends:一个父类可以有若干个子类,这些子类的具体成员各有不同。
- 实现implements:一个接口可以有若干个实现类,这些实现类的实现方式各有不同。