现代很多语言不使用面向对象类继承,而是选择组合。比如:
Go:
type Engine struct {
HorsePower int
}
type Car struct {
Model string
Engine Engine
}
Rust:
enum Color {
Red,
Green,
Blue,
}
struct Rectangle {
width: u32,
height: u32,
color: Color,
}
请问,这样的好处是什么呢,为何对比继承就会好呢,可以举实际使用场景说明吗?
面向对象作为一种抽象方式,最初是从自然界学习的。比如现有动物(animal),然后有猫(cat)和狗(dog),然后我们让他们叫(实现 bark 方法),让他们跑(实现 run 方法)。于是我们就有了统一的编程接口。虽然具体实现不一样,但是开发时候就不用考虑,可以大大提升复用代码的效率。很爽。
接下来我们还能在这个模型的基础上,利用仿生学原理,继续创造新的设计模式。
但是实践之后发现,大家要的不是猫跟狗,而是龙……他会飞,还会喷云吐雾,还不需要翅膀,偶尔还能放法术,还能变人形……你说怎么继承?从谁继承?