Swift Review#22–1[關於在繼承中的Super……]

前言

繼覆寫(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這個關鍵字的作用,就是為了覆寫,但又不完全覆寫而存在

結論:爸爸還是有一些基因是好基因啦,要留下來,自己再加上自己的優勢,才是一個好兒子嘛!

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

影山小麥機
影山小麥機

Written by 影山小麥機

本職為Mobile工程師,熱愛分享視野,也樂意站在ChatGPT的肩膀上。訂閱小麥機,收割技術、職涯、人生的難題。

No responses yet

Write a response