1 4 繼承和多型

2021-07-05 01:38:33 字數 2908 閱讀 9654

reason: '-[iphone signalwithnumber:]: unrecognized selector sent to instance 0x1003043c0'

多型:事物的多種表現形態,父類指標指向子類物件

多型的優點:提高了**的擴充套件性

注意點:如果父類指標指向子類物件,如果需要呼叫子類特有的方法,必須先強制型別轉換為子類才能呼叫

// 父類指標指向子類物件

animal *a = [dog new];

// 將父類指標強制轉為子類指標

dog *d = (dog *)a;

@public 

就是例項變數修飾符

@public

>

可以在其它類中訪問被

public

修飾的成員變數

>

也可以在本類中訪問被

public

修飾的成員變數

>

可以在子類中訪問父類中被

public

修飾的成員變數

@private

>

不可以在其它類中訪問被

private

修飾的成員變數

>

可以在本類中訪問被

private

修飾的成員變數

>

不可以在子類中訪問父類中被

private

修飾的成員變數

@protected

>

不可以在其它類中訪問被

protected

修飾的成員變數

>

可以在本類中訪問被

protected

修飾的成員變數

>

可以在子類中訪問父類中被

protected

修飾的成員變數

注意: 預設情況下所有的例項變數都是protected(手動在@inte***ce中的大括號中定義成員變數)

@package

>

介於public

和private

之間的

如果是在其它包中訪問那麼就是

private的

如果是在當前**所在的包種訪問就是

public的

例項變數修飾符作用域

: 從出現的位置開始

, 一直到下乙個修飾符出現

如果沒有遇到下乙個例項變數修飾符

, 那麼就會修飾後面所有的例項變數

注:只在@implementation中實現方法為私有方法(未在@inte***ce中定義宣告)

%@是用來列印物件的,其實%@的 本質是用於列印字串

- (nsstring *)description

// setter和getter方法的宣告

@property int age;

// 運用@property編譯器在編譯時會幫我們替換成以下

/*

- (void)setage:(int)age;

- (int)age;

*/

// setter和getter方法的實現

@synthesize age = _age;

// 運用@synthesize編譯器在編譯時會幫我們替換成以下

/*

- (void)setage:(int)age

- (int)age

*/

如果在@synthesize

後面沒有告訴系統將傳入的值賦值給誰

, 系統缺省會賦值給和

@synthesize

後面寫得名稱相同的成員變數

沒有告訴@property要將傳入的引數賦值給誰, 預設@property會將傳入的屬性賦值給_開頭的成員變數

@property有乙個弊端: 它只會生成最簡單的getter/setter方法的宣告和實現, 並不會對傳入的資料進行過濾

如果想對傳入的資料進行過濾, 那麼我們就必須重寫getter/setter方法

如果不想對傳入的資料進行過濾, 僅僅是提供乙個方法給外界操作成員變數, 那麼就可以使用@property

如果利用@property來生成getter/setter方法, 那麼我們可以不寫成員變數, 系統會自動給我們生成乙個_開頭的成員變數

注意: @property自動幫我們生成的成員變數是乙個私有的成員變數, 也就是說是在.m檔案中生成的, 而不是在.h檔案中生成的 ()

如果給乙個屬性同時提供了

getter/setter

方法, 

那麼我們稱這個屬性為可讀可寫屬性

(onlyread)

如果只提供了

getter

方法, 

那麼我們稱這個屬性為唯讀屬性

(onlywrite)

如果只提供了

setter

方法, 

那麼我們稱這個屬性為只寫屬性 ()

如果既沒有提供

getter

也沒有提供

setter

方法, 

那麼我們稱這個屬性為私有屬性

繼承和多型

物件導向程式設計時有乙個非常重要的原則 write once only once 編寫一次,且僅編寫一次 如果沒有繼承這種機制我們可能要重複寫很多 下面來看一下繼承 一 繼承 1 子類如果繼承父類必須使用extends這個關鍵字 2 子類呼叫父類的構造方法使用super關鍵字,也可以通過super來...

繼承和多型

物件導向程式設計時有乙個非常重要的原則 write once only once 編寫一次,且僅編寫一次 如果沒有繼承這種機制我們可能要重複寫很多 下面來看一下繼承 一 繼承 1 子類如果繼承父類必須使用extends這個關鍵字 2 子類呼叫父類的構造方法使用super關鍵字,也可以通過super來...

繼承和多型

類還有乙個重要的特性就是繼承,什麼是繼承?它又有什麼作用呢?繼承最主要的目的就是為了擴充套件原類的功能,加強或改進原類所沒有定義的屬性及方法。例如我們有狗這個類,可是狗的種類還是有很多,比如說博美狗,聖伯納,柴犬等等,如果只用狗一種類來定義所有種類狗的屬性及方法,那麼用這個類所產生出來的物件一定會有...