20120808-課堂筆記 --繼承、重載

1.繼承的概念

2.繼承的作用

  • 可以通過繼承,將所有重複的內容放在一起。
  • 子類通過繼承就可以獲得超類的實例變量和方法。

3.繼承語法

@interface 自定義類名  : NSObject

  • 在cocoa中,儘量從NSObject或已繼承NSObject的類繼承。
  • objective-c不支持多繼承,但可通過其他特性,如分類和協議實現多繼承的功能。
  • 繼承的內容包括:方法和實例變量。 一般只在對繼承的方法重載時,纔在子類對它聲明。
  • 繼承之後不必再聲明超類已有的實例變量,方法。
  • 繼承常用於擴展一個類

  • 不能通過繼承刪除,減少方法,但可以利用重載來更改繼承的定義。
  • 不能通過繼承減少方法或實例變量,只能添加。
  • 分類機制允許以模塊方式向現有的類定義添加新方法,尤其適用對沒有源代碼訪問權限的類添加新定義時。
代碼實例:
//定一個Shape類接口
@interface Shape : NSObject     //類名第一個字母要大寫

{
   
    ShapeColor fillColor;
    ShapeRect  bounds;

}

-(void)setFillColor:(ShapeColor)fillColor;
-(void)setBounds:(ShapeRect)bounds;
-(void)draw;

@end//Shape

//定義一個Circlr類
@interface Circle : Shape      //繼承了Shape類的方法和變量,不必再聲明。

{
    
}

//可以把函數寫在這,但是需要重載

@end//Circle

//定義一個Rectangle類
@interface Rectangle : Shape 

{
    
}

@end//Rectangle



4.類名,第一個字母要大寫。

超類:所繼承的類,又稱父類。
子類:實施繼承的類。
重寫:改變方法的實現時,需要用到重寫。

5.消息調度機制
  • 當代碼發送消息時,objective-c 的方法調度程序將在當前類中搜索相應的方法。
  • 如果調度程序無法在接受消息的對象中找到相應的方法,它就在該對象的超類中進行查找。
6.
  • NSObject 聲明瞭一個名爲isa的實例變量,該變量保存一個指向對象的類的指針。
  • 每個方法都有一個名爲self的隱藏參數,指向繼承鏈中第一個類的第一個實例變量。
  • 編譯器使用基地址加偏移 查找實例變量的位置,對象的基地址指向第一個實例變量的首個字節在內存中的位置。
  • isa對應類,self對應方法。
7.重寫方法

  • 添加全新的方法。
  • 修改方法。
  • 方法調度程序將使用重寫的方法,而忽略超類的方法。重寫的方法 優先級大於超類的原方法
Q:提供某種重寫方法時,若仍想調用超類的實現方法?
*---------------------------------------------------------------
解決方法: super 關鍵字
|1.可以通過super 實現顯示的調用超類方法,如下:
[super setFillColor  :  c ];
|注意:此處不能寫成 [Shape setFillColor : c]; 是實例方法,不是類方法。
|2.在子類中重寫方法時,常顯示的調用超類方法。
|3.向super發送消息時,objective-c 向該類的超類發送消息。如果超類中沒有定義該消息,將按照通常的方式在繼承中繼續查找對應的消息。
*---------------------------------------------------------------

本課總結:

  1. 理解oop中繼承的概念。
  2. 場我繼承的語法規則。
  3. 理解objective-c的方法調度機制:無繼承、有繼承。
  4. 理解關鍵字super的作用。
  5. 掌握在重寫方法中調用超類同名方法。







疑問。函數不一定要定義在類中。如果類外的函數要訪問類的數據成員,可以使用程序方法來訪問。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章