【这些年我似是非懂的 Javascript】那些年我睡掉的物件导向 #浅谈 #Part 2

嗨各位好久不见,
今天要来分享上次的续集 第 2 part ,
上篇讲到建构器
今天要来分享关於继承和多重继承的部分。

继承

上次有稍微提到这部分

例如一台车子就可以先定义更通用的类别叫做载具(Vehicle),
而载具里面定义了各种不同类型的功能,比方说上面所说的载人、推进、飞天,
当我们想要定义其他载具,比方说火车,我们就可以透过继承或是扩充,就可以达到我们要的。

今天再来分享一个例子来解释一下甚麽是继承

一对夫妻生小孩,父母的基因会复制在小孩身上,但是小孩是与父母分离的个体,但是特徵会被父母影响。以物件导向也就是说父母的 DNA 就是父类别,小孩的 DNA 就是子类别,子类别会拥有父类别复制过来的最初的行为,并且子类别可以做复写任何继承过来的行为,或是定义新的行为。
也就是小孩长大了也可以长江後浪推前浪或是一代不如一代XDD 又或是创造新的属於自己的天地。

多重继承

甚麽? 难道是影分身?

还是如果是以父母的 DNA 来说...
咳咳嗯...
谁是我爸爸
如果以父母的 DNA 来比喻感觉很怪异,但是你想是卡片合成之类的可能比较好想像 xD
某些物件导向语言可以指定一个以上的父类别来继承,这就叫做多重继承,也就是说拔拔"们"的类别定义都会复制到子类别中。
就像是如果我爸是巴菲特 + Lebron James + 毕卡索 + 李白,那我感觉我就是神了 (各种乱尬)
这听起来非常棒对吧?
是不是想说...
贵圈真乱 xDD

对的!除了贵圈真乱之外他还有可能会造成一些复杂的问题出现。
但是他也不是完全没缺点,如果其中两个父类别都提供了相同的方法,那子类别会取用哪个呢?
就像是如果我爸爸是李白加上杜甫那我该选择要选用谁的造诗功力?
那在假使可以指定选用哪个那是不是又跟原本多重继承的概念有点冲突,好像不是那麽优雅又聪明了。

除了这个还有另一个变体叫做 钻石问题(diamond problem)

如果像上面图这样,
B 和 C 继承父类别 A,并且各自都覆写那个方法接着 D 又多重继承 B 和 C ,那他该使用 B 还是 C 的方法呢?

我们这主题是 Javascript ,所以回到 JS 本身他会怎麽处理呢?
答案是...
不用处理xDDD
因为 JS 本身没有提供原生的机制去进行多重继承

哈哈哈
哈哈

呜呜呜呜呜 QQ

(有人认为这是好事,毕竟他可以减少复杂度,但是现实中没办法避免开发人员自己去用各种方式伪造多重继承的效果


以上是今天的内容
下篇会讲关於最後提到的伪造多重继承

感谢你的收看
我们下次见


<<:  让WooCommerce的订单通知信里面的商品名称附带商品网址的程序码

>>:  最不频繁地向客户提供工作软件(敏捷的角度)-原型设计(Prototyping)

新新新手阅读 Angular 文件 - Add Service(2) - Day09

学习目标 这一篇是纪录阅读官方文件 Add services 的笔记内容。 本篇的内容是接续 Day...

[Day27]程序菜鸟自学C++资料结构演算法 – 堆积排序法(Heap sort)

前言:在第16、17天的时候有介绍到堆积,今天要利用堆积的特性来实现排序法,忘记或不知道堆积是甚麽的...

[Day 26] - React 前端串後端 - 串接登入

经过一整天的奋斗,终於跟React稍微熟了一点 首先建一个apiUtil.js 我打算把跟後端相关的...

Kotlin Android 第9天,从 0 到 ML - 介面与抽象类别 / 泛型 / 扩充

前言: 今天来看 介面与抽象类别 / 泛型 / 扩充 大纲: Interface 介面,像是一个SO...

Day30 D3js 浪漫突进的回顾及展望

D3js 浪漫突进的回顾及展望 你只要顾好你会的、你喜欢的,一直讲、拼命讲,展现你的魅力! -- 浪...