繼承:類和類之間的關係
派生:子類在父類基礎上衍變出一些新的特性或者功能
子模擬父類更加強大
父類 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...