我們都知道,物件導向程式設計中的類有三大特性:繼承,封裝,多型。今天主要總結一下繼承和多型。
程式的世界和人類的「物件」世界在思想上是沒有設麼區別的,富二代繼承了父母,自然就擁有了父母擁有的所有資源,子類繼承了父類同樣就擁有了父類所有的方法和屬性(成員變數)。繼承是類中的乙個重要的特性,他的出現使得我們沒必要別寫重複的**,可重用性很高。
在這裡動物是貓類和狗類的父類,黑貓和白貓類是貓類的子類。我們可以這樣理解,對於貓和夠來說,動物擁有的一切貓和狗都同時擁有。
**如下:
@inte***ce animal:nsobject
@property int age; //年齡
@property double weight; 體重
- (void)eat; //吃東西
- (void)laugh; //微笑
@end
@implementation animal
- (void)eat
- (void)laugh
@end
@inte***ce cat:animal //貓繼承自動物
//自動擁有動物類的屬性
@end
@implementation cat
//自動擁有動物類的方法
@end
oc語言是單繼承語言。在oc語言中,基本上所有類的根類都是nsobject類。
@inte***ce animal:nsobject
//動物裡繼承了nsobject,獲得nsobject類的方法;
@end
@inte***ce dog :animal
//dog類繼承animal類
@end
// bird的宣告
@inte***ce bird : animal
- (void)fly;
@end
// bird的定義
@implementation bird
- (void)fly
@end
// dog的宣告
@inte***ce dog : animal
- (void)run;
@end
// dog的定義
@implementation dog
- (void)run
@end
優點:
不改變原來模型的基礎上,拓充方法
建立了類與類之間的聯絡
抽取了公共**
壞處:
耦合性強
多型在**中的體現,即為多種形態,必須要有繼承,沒有繼承就沒有多型。
在使用多型是,會進行動態檢測,以呼叫真實的物件方法。
多型在**中的體現即父類指標指向子類物件。
父類的宣告與實現
// 動物
@inte***ce animal : nsobject
- (void)eat;
@end
@implementation animal
- (void)eat
@end
子類的宣告與實現
// 貓
@inte***ce cat : animal
@end
@implementation cat
- (void)eat
@end
多型的表現:
int main()
animal *a=[cat new]; //貓是個動物
[a run];
cat c=[cat new];
[c run];
子類物件賦值給父類指標
父類指標訪問對應的屬性和方法
dog *d=[[animal alloc] init]; 動物是一條狗?語義正確嗎?
nsstring *str=[dog new]; 狗是乙個字串?正確嗎?
oc語言是一門弱語法的語言,編譯的時候並不會報錯,所以這就要求我們在實際的開發過程中一定要按照既定的規範來寫**,不要出現狗是乙個字串這樣的問題。
多型的好處:
需要乙個新的函式專門用來餵狗
void feed(dog *d)
同時也需要乙個函式用來喂貓
void feed(cat *c)
而狗和貓實際上都繼承自動物這個類,在這裡就可以使用多型來簡化**了。
這裡只需要把函式的引數寫成是animal *型別的,那麼dog和cat型別的物件就都可以傳入進來。
呼叫的時候直接改變引數就可以了。
1.沒有繼承就沒有多型
2.不能訪問子類的屬性(可以考慮強制轉換)
3.動態繫結:在執行時根據物件的型別確定動態呼叫的方法
4.**的體現:父類型別的指標指向子類物件
5.好處:如果函式
\方法引數中使用的是父類型別,可以傳入父類、子類物件
黑馬程式設計師 OC學習之類和物件
1 物件導向和面向過程 物件導向和面向過程是程式設計的兩種思考方式。物件導向,簡稱oop,它是以事物為中心,參與事件的事物是核心,完成事件只是事物的乙個小任務。面向過程,簡稱opp,它是以事件為中心,事件是核心,列出了完成事件的每乙個步驟,一步一步完成。也就是物件導向側重於從問題在尋找客體 客體的作...
黑馬程式設計師 OC之類和物件
類 類是抽象的 物件 物件是具體 ios培訓 android培訓 期待與您交流!1 設計乙個類的步驟 1 類名,2 屬性,3 行為 功能 1 擁有相同屬性和行為的類都可以抽象出乙個類 2 設計乙個植物大戰殭屍中的殭屍 1 類名 zoombie 2 屬性 life speed gongjili 3 行...
黑馬程式設計師 OC的繼承
oc物件導向 繼承 一 基本概念 程式的世界和人類的 物件 世界在思想上是沒有設麼區別的,富二代繼承了父母,自然就擁有了父母擁有的所有資源,子類繼承了父類同樣就擁有了父類所有的方法和屬性 成員變數 在這裡動物是貓類和狗類的父類,黑貓和白貓類是貓類的子類。繼承的好處 1 抽取出了重複的 2 建立了類和...