類的擴充套件 一 繼承

2021-07-03 21:46:31 字數 2893 閱讀 3151

oc中,繼承於nsobject的類統稱為 model 類(存字串)

oc中,只允許單繼承,無多繼承,協議是間接地實現多繼承的方式

繼承所有的例項變數和方法,子類可以重寫父類的方法

例子:student繼承於person

person.h檔案

#import @inte***ce person : nsobject

// 非重寫的初始化方法需要進行宣告

- (instancetype)initwith***:(nsstring *)***;

- (instancetype)initwithname:(nsstring *)name;

- (instancetype)initwithage:(nsinteger)age;

- (instancetype)initwithage:(nsinteger)age ***:(nsstring *)***;

- (instancetype)initwithname:(nsstring *)name ***:(nsstring *)***;

- (instancetype)initwithname:(nsstring *)name age:(nsinteger)age;

- (instancetype)initwithname:(nsstring *)name ***:(nsstring *)*** age:(nsinteger)age;

// 便利構造器

+ (instancetype)initwithname:(nsstring *)name ***:(nsstring *)*** age:(nsinteger)age;

- (void)eat;

- (void)toilet;

@end

person.m檔案

#import "person.h"

@implementation person

// 子類如果繼承父類,那麼在子類的初始化方法中(內部)必須呼叫父類的初始化方法

// 指定指派初始化方法,可以用來糾錯

// 這個初始化方法為指派初始化方法,***是必須有的

- (instancetype)initwith***:(nsstring *)***

return self;

}// 非重寫的初始化方法需要進行宣告

// 在非指派初始化方法中,自己本身呼叫指派初始化方法

// 在這些方法中 無***時,需要賦乙個預設值

- (instancetype)init

//- (instancetype)initwithname:(nsstring *)name

////

// return self;

//}- (instancetype)initwithname:(nsstring *)name

return self;

}- (instancetype)initwithage:(nsinteger)age

return self;

}- (instancetype)initwithage:(nsinteger)age ***:(nsstring *)***

return self;

}- (instancetype)initwithname:(nsstring *)name ***:(nsstring *)***

return self;

}- (instancetype)initwithname:(nsstring *)name age:(nsinteger)age

return self;

}- (instancetype)initwithname:(nsstring *)name ***:(nsstring *)*** age:(nsinteger)age

return self;

}// 便利構造器

+ (instancetype)initwithname:(nsstring *)name ***:(nsstring *)*** age:(nsinteger)age

- (void)eat

- (void)toilet

@end

student.h檔案

#import // 引入person.h檔案

#import "person.h"

@inte***ce student : person// 子類 : 父類

@end

student.m檔案

#import "student.h"

@implementation student

- (instancetype)init

// 重寫父類方法,不需要再次宣告

- (void)eat

- (void)toilet

@end

main檔案
#import #import "person.h"

#import "student.h"

int main(int argc, const char * argv)

return 0;

}

列印結果:

吃五穀雜糧

self =

per =

吃五穀雜糧

self =

吃果蔬__func__ = -[student eat]

next self =

上廁所__func__ = -[student toilet]

stu =

next self =

上廁所__func__ = -[student toilet]

繼承與多型(一) 使用繼承擴充套件類

enum breed class mammal mammal int newage,int newweight age newage weight newweight mammal int getage void setage int newage int getweight void setwei...

Python繼承擴充套件內建類

繼承最有趣的應用是給內建類新增功能,在之前的contact類中,我們將聯絡人新增到所有聯絡人的列表裡,如果想通過名字來搜尋,那麼就可以在contact類新增乙個方法用於搜尋,但是這種方法實際上屬於列表本身,我們可以使用繼承來做 class contactlist list defsearch sel...

C C 類設計 擴充套件和繼承

繼承是c 程式庫用來提供擴充套件性的主要機制。有時,從乙個類實現繼承是容易的 但某些時候,從乙個類繼承確實很難實現的。類派生的困難程度取決於派生類本身與基類的設計與實現。對於乙個類而言,如果可以容易地從它派生出適當的派生類,我們就稱這個是可以繼承的,之所以說是適當的派生類,因為沒有人會這樣認為 由於...