前言
繼覆寫(Overriding)為主題的內容後,大致上提到了繼承(Inherit)的主要概念,不僅是從父子之間的觀點切入父類別與子類別的邏輯關係,更從中提及覆寫屬性、覆寫方法的具體作法,然而在繼承為題的一個篇幅之下,還有一個概念未提及,即為:存取超類別的方法、屬性及下標腳本
本文將以此為主軸,描述及探索其實質意義。
正文
就以《The Swift Programming Language》Swift正體中文版對於Super的主要描述如下:
在合適的地方,你可以通過使用super
前綴來存取超類別版本的方法,屬性或下標腳本:
- 在方法
someMethod
的重寫實作中,可以通過super.someMethod()
來呼叫超類別版本的someMethod
方法。 - 在屬性
someProperty
的 getter 或 setter 的重寫實作中,可以通過super.someProperty
來存取超類別版本的someProperty
屬性。 - 在下標腳本的重寫實作中,可以通過
super[someIndex]
來存取超類別版本中的相同下標腳本。
什麼意思呢?換句話說,super這個字眼所擔綱的功能,就是能加在一些方法、屬性的前面,取得父類別的方法、屬性,為什麼要這樣做呢?
因爲假如認為原先的方法、屬性其實是有可取之處的,可以藉由super這個功能,讓它們保留在後來再定義的子類別裡面,而不是完全的覆寫了它。
以下有一實例:

我們總之,就先定義一個基類別(Base Class)叫Fighter,而Gangster繼承了Fighter的衣缽,但我們想要一些Fighter的東西,又不想完全取代,於是super就派上用場了。
在skill中,我們就想要新增它,於是我們就用了super.attack( ),先把父類別的東西調用下來,再加上我們自己新增的“Some skill”,而對於方法,我們也在類別Gangster中如法炮製。
大致結果如上。
總之,super這個關鍵字的作用,就是為了覆寫,但又不完全覆寫而存在。
結論:爸爸還是有一些基因是好基因啦,要留下來,自己再加上自己的優勢,才是一個好兒子嘛!