当前位置: 首页 > 知识库问答 >
问题:

前端 - 为何现代语言使用组合对比继承就会好呢,可以举实际使用场景说明吗?

凌永逸
2025-01-13

现代很多语言不使用面向对象类继承,而是选择组合。比如:
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,
}

请问,这样的好处是什么呢,为何对比继承就会好呢,可以举实际使用场景说明吗?

共有1个答案

鲁城
2025-01-13

面向对象作为一种抽象方式,最初是从自然界学习的。比如现有动物(animal),然后有猫(cat)和狗(dog),然后我们让他们叫(实现 bark 方法),让他们跑(实现 run 方法)。于是我们就有了统一的编程接口。虽然具体实现不一样,但是开发时候就不用考虑,可以大大提升复用代码的效率。很爽。

接下来我们还能在这个模型的基础上,利用仿生学原理,继续创造新的设计模式。

但是实践之后发现,大家要的不是猫跟狗,而是龙……他会飞,还会喷云吐雾,还不需要翅膀,偶尔还能放法术,还能变人形……你说怎么继承?从谁继承?

 类似资料:
  • 本文向大家介绍举例说明attr()的使用场景相关面试题,主要包含被问及举例说明attr()的使用场景时的应答技巧和注意事项,需要的朋友参考一下 css content 的 attr() 呀,开始还以为是 jquery 的 attr() 可以用于 tooltips 可以用于多个内容文本替换,比如菜单效果 存放 i18n 信息 总的来说,是将一些文本存在 html 中,在 css 中可以被使用。

  • 本文向大家介绍举例说明js如何实现继承?相关面试题,主要包含被问及举例说明js如何实现继承?时的应答技巧和注意事项,需要的朋友参考一下 JavaScript 基于原型链实现的继承,简单来说就是通过对象的实现的向上查找。 比如你从未定义过方法,但是你却可以在任何地方使用它,原因就是当你使用时,他会先在自身查找看看没有这个方法,如果没有就根据寻找他的原型对象,看看他的原型对象上有没有....知道找到为

  • 本文向大家介绍举例说明:not()的使用场景有哪些相关面试题,主要包含被问及举例说明:not()的使用场景有哪些时的应答技巧和注意事项,需要的朋友参考一下 可以理解为反向选择器 举例: 1 2 33333 <style> p:not(#strong){ color:red; } </style> 可以直接选择到前两个p元素

  • 本文向大家介绍请举例说明width:fit-conten有什么使用场景相关面试题,主要包含被问及请举例说明width:fit-conten有什么使用场景时的应答技巧和注意事项,需要的朋友参考一下 可以看下这篇文章

  • phpGrace 语言包使用说明 1、添加语言包文件 位置:/分组目录/lang/语言.php 【自行创建】 命名: zh.php、en.php ,规则 : 语种.php //语言文件代码格式 <?php return array( 'APP_NAME' => 'phpGrace', 'btnname' => '提交' ); 2、语言设置 $this->setLa

  • 本文向大家介绍举例说明BFC有什么应用场景相关面试题,主要包含被问及举例说明BFC有什么应用场景时的应答技巧和注意事项,需要的朋友参考一下 https://www.jianshu.com/p/91a80d6570b0

  • 本文向大家介绍说说你对accesskey的理解,举例说明它有什么运用场景?相关面试题,主要包含被问及说说你对accesskey的理解,举例说明它有什么运用场景?时的应答技巧和注意事项,需要的朋友参考一下 accessKey 可以注入到任意的元素中,通过快捷键触发对应元素的绑定事件。 mac 快捷键:

  • 如何实现继承接口的函数?我有以下接口: 现在我希望IShelter有一个函数: 但我希望狗庇护所能这样实施: 像这样的猫头鹰: 有没有办法做到这一点?除了有DogShelter实现存储(IAnmial动物)和检查是否(动物是IDog)? 我应该用商店(动物),然后用(动物)投它吗? (我想使用关于IDog和ICat的接口继承。类继承在实际代码中是不可能的)(此时计算时间有点重要。使用Store(I