# Day9--老爸,我可以继承你的家产,但我不想长得太像你

引述自100Days of Swift-Class inheritance:

The second difference between classes and structs is that you can create a class based on an existing class — it inherits all the properties and methods of the original class, and can add its own on top.

第二件类别与结构不相同的地方,即於类别(class)可以创造另一个类别,且基於你现在创造的类别的上一个类别,基於上一个类别再创造的类别,它可以继承所有在上一个类别里的属性与方法,且,可以增加自己的在它自己的上面。

This is called class inheritance or subclassing, the class you inherit from is called the “parent” or “super” class, and the new class is called the “child” class.

这个被称作是继承(inheritance)或是子类化(subclassing),你继承自(inherit from)的类别,可以称作是父类别(parant),或俗一点的翻译:超类别,而你现在新创造的这个类别则称为子类别(child class)

简言之,你从一个人身上生下来,你势必会有他身上的特徵,但你又跟他不一样,但因爲你的人生是你的,所以你会有一些不一样的特别之处在你身上。

如果以实务上来说,大家应该玩过小朋友齐打交(LF2),我猜想它应该就是爲所有人物先创造一个基本型态(透明人),然後其他的角色就是继承透明人的基本轮廓,延伸出各样拥有自己能力的邪鬼….冰火人….等。

实例

那既然上面都举了个LF2的例子了,以下就会尽量以基於LF2的概念下去延伸这个篇章,而就以实例来说,我们就先定义了Fighter这个基本类别:

如何产出子类别,会以下面这个概念来描述:

而实际产出子类别的实例,我们则以某个角色David作为设定好了:

如果我们不做覆写的改动它的方法以及属性,它仍旧会继承父类别Fighter的属性,比如像name就还是保有它最初的“No one”字串,power、speed则是维持原先父类别的100。
不过,当然我们在做一个角色的时候,还是要把它的父类别盖过去吧?
所以,我们接下来要谈的就会是覆写(override)这个功能。
覆写为主的功能

下面这些会讲到一个概念是覆写,无论是1.覆写属性或是2.覆写方法

1.覆写属性(override property)

在覆写属性的时候,大概会有几件事情:第一件是宣称你要覆写的属性是在父类别里面的某一个属性,第二件是:

需要使用getter(以及有时可省略的setter)来覆写继承来的属性,且一定要写上属性的名称及型别,这样才能确定是从哪一个属性继承而来的。

如果以上述的图片中,撷取getter与setter的部分:
覆写name的字串:

覆写power的Double:

如此,基於上两者的描述,可以知道,get在做的事情就是能够返回值,而set则将newValue的部分指向新覆写的值,无论是String或Double。

2.覆写方法(override method)

在执行覆写的时候,有一个关键字一定要加上去,它叫做override,它覆写在函式上的时候就会像下面这个样子:
原本的Fighter:

David的attack( )覆写掉Fighter的attack( ):

总之,覆写这个功能的主要用途,就是把父类别不一样的地方直接修改成我们要的项目。

综合本篇对继承(inherit)的这个概念的描述,大概可以分成以下几件事情:

儿子当然会继承父亲的一些东西吧?
但儿子仍旧会有一些想要跟父亲不一样的地方吧?
所以覆写就是让儿子跟父亲不一样的功能罗!

tags: 铁人赛

<<:  @Day24 | C# WixToolset + WPF 帅到不行的安装包 [87分帅的设定页面]

>>:  Day 09 pipenv

Gulp Babel ES6 编译(2) DAY84

昨天我们已经介绍 babel编译 与 concat合并成一支档案 但我们还没介绍 Source Ma...

30天学会C语言: Day 2-世界泥豪

今天要让电脑说泥豪 printf() stdio.h 中的函式,可以把 字串 显示到程序的视窗上 字...

管理者该专注的四件事

上一篇我分享了 ALPHA Camp 与 Google 的主管绩效评估问卷作为参考。一个有效的管理者...

Day-21 面试考古题破解区(3)

今天还是来讲面试考古题,因为太多了讲不完啦! 开始今天的面试考古题破解区(3) 面试考古题(3) ...

Day 9 阿里云架设网站-云端资料库

自建关联式资料库的瓶颈: 关联式资料库(Relational Database),几乎在所有应用中都...