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