繼承和派生

2021-08-07 04:07:23 字數 1794 閱讀 3445

繼承:類和類之間的關係

派生:子類在父類基礎上衍變出一些新的特性或者功能

子模擬父類更加強大

父類 parentclass superclass 【基類】

子類 childclass subclass 【派生類】

nsobject 還可以稱為根類

private 私有繼承

protected 受保護繼承

public 公有繼承

oc沒有繼承方式之說,類似c++中的公有繼承

oc的方法全部都是公有的,沒有私有方法之說

c++屬於多繼承 可以繼承多個類

多繼承缺點:二義性【不確定繼承哪個類】

oc沒有多繼承 屬於單繼承

oc怎麼實現多繼承?

通過協議來實現

預設受保護

public:

公有的,作用域:類外可以直接使用【物件指標—>_height】,類內(-)方法可以直接使用;子類繼承父類之後,子類(-)方法可以直接使用

+方法不可用,因為和成員變數無關

protected:

受保護,類外不能直接使用,但是可以通過類的方法間接使用;類內(-)方法可以直接使用【子類可以繼承】,子類繼承父類之後,子類(-)方法可以直接使用

private:

私有,類外不能直接使用,但是可以通過類的方法間接使用;類內(-)方法可以直接使用;子類不能繼承父類的私有的成員變數【子類不能直接使用這個私有變數】

子類可以直接使用父類的受保護的和公有的變數,父類私有的子類不能直接使用

父類的私有變數子類可以間接使用父類的方法訪問

self.secret

一部分是繼承的父類的變數,還有部分子類自己專有的變數,繼承之後都是子類自己的,只是**不一樣

oc有沒有私有變數、私有方法?

如果沒有,怎樣實現

有私有變數 @private修飾

沒有像c++一樣的私有方法,但是可以實現

oc預設所有的方法都是公有的,子類可以直接使用的

【方法有如下2種】

1.在標頭檔案中不宣告方法,只在.m類的實現部分實現方法

沒有對外公開,只是方便類內的函式來呼叫

不能呼叫沒有宣告的方法

2.把方法宣告寫在匿名類別中,匿名類別寫在類的實現上方

方法的實現仍然在類的實現部分

匿名類別可宣告成員變數【預設/預設的訪問控制:私有的】子類不可直接繼承

匿名類別:可以把不公開的成員方法和變數在匿名類別中進行宣告,達到私有化的目的

繼承的方法可以不宣告

oc是動態的語言,編譯時不檢測,執行時檢測

oc執行方法的過程:【編譯時不檢測】程式執行到方法呼叫的時候,首先去指標指向的物件所屬的類找有沒有實現方法,如果有就呼叫,如果沒有,就去父類的方法中去找,依次類推,直到最後,如果沒找到,直接崩潰

super 不是物件也不是方法【當前物件執行父類的方法】

當子類需要在父類的方法基礎上擴充套件一些新的功能,這個時候在重寫父類的方法的時候,可以先用super呼叫父類的方法,再寫自己需要擴充套件的方法

[super printvar];

c++ 沒有super 只能通過類域呼叫[super father::printvar];

子類重寫父類方法後,子類如果想要呼叫父類的方法,那麼需要用super呼叫

super 只是乙個修飾符/編譯器符號,表示當前物件去呼叫父類的方法,僅此而已【不是指標】

派生和繼承

1.派生類的概念 以物件導向的程式設計的觀點來看,繼承表達的是物件類之間的相互關係。這種關係使得某類物件可以繼承另外一類物件的特徵和能力。如果一類物件繼承了另一類物件的特徵和能力,這個類就叫做所繼承類的派生類。1.1 宣告乙個派生類的一般格式是 class 派生類名 派生方式 public or p...

繼承和派生

繼承中的基本語法 通過公有繼承,派生類得到了基類中除建構函式 析構函式之外的所有成員。include using namespace std class parent void howtoprint2 parent base void main int b protected private cla...

派生和繼承

1.派生類的概念 以物件導向的程式設計的觀點來看,繼承表達的是物件類之間的相互關係。這種關係使得某類物件可以繼承另外一類物件的特徵和能力。如果一類物件繼承了另一類物件的特徵和能力,這個類就叫做所繼承類的派生類。1.1宣告乙個派生類的一般格式是 class 派生類名 派生方式 public or pr...