一、继承⽅式:
在现实⽣活中,事物之间的关系是⾮常复杂,灵活多样,⽐如:

但在Java中只⽀持以下⼏种继承⽅式:

注意:Java中不支持多继承。
时刻牢记,我们写的类是现实事物的抽象。而我们真正在公司中所遇到的项目往往业务比较复杂,可能会涉及到一系列复杂的概念,都需要我们使用代码来表示,所以我们真实项目中
所写的类也会有很多。类之间的关系也会更加复杂。
但是即使如此,我们并不希望类之间的继承层次太复杂。一般我们不希望出现超过三层的继承关系。如果继承层次太多,就需要考虑对代码进行重构了。
如果想从语法上进行限制继承,就可以使用final关键字。

二、final 关键字
final 关键可以用来修饰变量、成员方法以及类。
-
修饰变量或字段,表示常量(即不能修改)
1 final int a = 10;
2 a = 20; //编译出错
-
修饰类:表示此类不能被继承
1 final public class Animal {
2 …
3 }
4
5 public class Bird extends Animal {
6 …
7 }
我们平时是用的 String 字符串类,就是用 final 修饰的,不能被继承。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence,
Constable, ConstantDesc {
-
修饰方法:表示该方法不能被重写(后序介绍)


三、继承与组合
和继承类似,组合也是⼀种表达类之间关系的⽅式,也是能够达到代码重⽤的效果。组合并没有涉及到特殊的语法(诸如extends这样的关键字),仅仅是将⼀个类的实例作为另外⼀个类的字段。
继承表⽰对象之间是is-a的关系,⽐如:狗是动物,猫是动物
组合表⽰对象之间是has-a的关系,⽐如:汽⻋

//轮胎类
class Tire{
// …
}
//发动机类
class Engine{
// …
}
// 车载系统类
class VehicleSystem{
// …
}
class Car{
private Tire tire; //可以复用轮胎中的属性和方法
private Engine engine; //可以复用发动机中的属性和方法
private VehicleSystem vs; //可以复用车载系统中的属性和方法
// …
}
// 奔驰是汽车
class Benz extends Car{
//将汽车中包含的:轮胎、发送机、车载系统全部继承下来
}
组合和继承都可以实现代码复⽤,应该使⽤继承还是组合,需要根据应⽤场景来选择。
⼀般建议:能⽤组合尽量⽤组合。



