窺探Swift之類的繼承與類的訪問許可權

2022-03-11 00:16:09 字數 2626 閱讀 4714

》的部落格可謂是給swift中的類開了個頭。關於類的內容還有很多,今天就來搞一下類中的繼承以及類的訪問許可權。說到類的繼承,接觸過物件導向程式設計(oop)的小夥伴並不陌生,繼承就是oop程式設計中幾大特徵之一,所以還是有必要把類的繼承拎出來聊聊的。說到訪問許可權,這個在oop程式設計中也是不可或缺的。如果你接觸過其他oop的語言,你應該對private, public, protected並不陌生。在swift這麼物件導向的程式語言中,也有類似的概念,不過其具體表達的方式以及每種許可權的作用域不同罷了。在swift中的訪問許可權有private, internal與public。他們的作用域與其他語言還是有些區別的,這個稍後會細細的道來。

今天的部落格在類的內容中還是比較重要的,同時也是比較基礎的東西,當然很有必要好好的搞一下嘍。在介紹繼承和訪問許可權時,在恰當的地方會模擬一下objc, 如果你沒有接觸過objc, 那麼沒關係,你可以把模擬的部分給忽略掉,這並不影響你對swift相應內容的理解。好~開始今天部落格的內容。

一. 類的繼承

其實繼承理解起來還是蠻簡單的,說白了就是子承父業。子類可以繼承父類的一些東西,在繼承之時,父類可以選擇一些東西留給子類,同時也可以保留一些東西作為私有(private)物品。同樣,子類也可以選擇一些東西進行繼承,如果對繼承的東西不太滿意,子類就可以對繼承過來的東西進行重新改造(override)以滿足自己的需求。如果要定義抽象類,只需把該類的構造器定義為私有即可。下方將會給出類的繼承的一些示例,通過這些事例來認識一下swift中的繼承。

1. 父類的建立

這裡我們建立乙個名為father的父類,他類可以繼承father類。在father類中有兩個初始值為空串的屬性變數,並且有乙個含有預設值引數的構造器,還有乙個是輸出變數值的displayallname()的方法。類中的**比較簡單,具體如下所示。

1

import foundation

2class

father

1011

func displayallname()

14 }

如果要定義抽象類,只需把上面的構造器進行乙個修改即可。抽象類即為專門用來做其他類的父類的類,抽象類不能夠直接被例項化,所以把其構造器定義為私有的就可以達到不能直接被例項化的目的。如果要把上述類修改成抽象類,那麼把上面的建構函式替換成下方私有的建構函式即可。

1

private

init()

2.實現father的子類children

children類繼承自father類,並在father類的基礎上做了相應的擴充。children中的構造器呼叫了父類的構造器來對父類的一些屬性進行初始化,當然,你也可以直接使用self來訪問父類的非私有屬性進行初始化,因為children是繼承自father的,所以father中非私有的東西都是視為己有的所以可以使用self來訪問父類非私有的東西。子類持有了父類的非私有的東西,同時還可以增加屬於自己的東西,子類肯定是要在父類的基礎上在新增一些屬於自己特有的東西。children新增了父類中沒有的job和displaymyjob的方法。

1

class

children: father 89

func displaymyjob()

1213 }

3.children類的例項化

chidren就是個類,其使用方式沒有什麼特別之處,就是呼叫構造器來進行類的例項化。例項化後,就可以呼叫類的非私有的屬性和方法了,具體**如下:

1         let children = children(surname:"

li", name:"

zelu

", job:"

coder")

2children.displayallname()

3 children.displaymyjob()

4.防止類的子類化

抽象類的使命是專門用來繼承的,而有些類是不想讓其他類進行繼承的(丁克家族)。舉個例子,有些小夫妻呢,就不想要孩子,那麼怎麼辦呢?在swift中也是有final關鍵字的,被final關鍵字所修飾的類是不能用來繼承的。我們可以把father類定義成final型別,並觀察children發生的變化。下方是修改後father類的**:

final class

father

father新增上final關鍵字修飾後如果children還對其進行繼承那麼就會報下面的錯誤,如下所示:

二、訪問許可權

swift中的訪問許可權與其他物件導向程式設計語言有所不同,雖然swift中的訪問許可權也分為3個等級,但是每個等級所能訪問的區域與其他程式語言相比還是有些區別的。在swift的訪問許可權包括public, private, internal三種訪問級別。下面將要對這三個級別一一進行介紹。

private: 私有訪問許可權,被private修飾的類或者類的屬性或方法可以在同乙個物理檔案中訪問。如果超出該物理檔案,那麼有著private訪問許可權的屬性和方法就不能被訪問。

internal: 顧名思義,internal是內部的意思,即有著internal訪問許可權的屬性和方法說明在模組內部可以訪問,超出模組內部就不可被訪問了。在swift中預設就是internal的訪問許可權。

關於訪問許可權的例項就不過贅述了,理解起來還算是簡單的,今天的部落格就先到這兒,接下來回繼續更新關於swift相關的部落格。如有錯誤還望批評指正。

Python 之 類的繼承

知識點 1.類的繼承 只能繼承父類的共有方法和屬性 2.當子類中無此方法時呼叫父類的方法 3.當有多個方法時,可通過print d.mro 檢視父類中 4.方法的重寫 當父類中的方法不能滿足需求的時候,可在子類中對其進行重寫 class a object def print c self print...

c 學習之類的繼承與派生

8.3 類的繼承與派生 c 語法 定義派生類 class 派生類名 繼承方式1 基類1,繼承方式2 基類2,派生類宣告部分 各新增函式成員的完整定義 派生類實現部分 語法說明 定義派生類時,在派生類名的後面新增繼承列表,在宣告部分的大括號裡宣告新增成員,在實現部分編寫各新增函 數成員的完整定義 繼承...

窺探Swift之別樣的列舉型別

想必寫過程式的童鞋對列舉型別並不陌生吧,使用列舉型別的好處是多多的,在這兒就不做過多的贅述了。fundation框架和uikit中的列舉更是數不勝數,列舉可以使你的 更易閱讀並且可以提高可維護性。在swift語言中的列舉可謂是讓人眼前一亮。在swift中的列舉不僅保留了大部分程式語言中列舉的特性,同...