封裝、繼承與多態(tài)

今天簡單總結(jié)一下面向?qū)ο蟪绦蛟O(shè)計的三大特性:封裝、繼承與多態(tài)。

一、封裝

隱藏內(nèi)部實現(xiàn),穩(wěn)定外部接口。也就是定義類,定義屬性,定義方法。
現(xiàn)在我們來封裝一個Person類,繼承自NSObject:

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *sex;

- (void)work;

@end

#import "Person.h"

@implementation Person

- (void)work
{
    NSLog(@"%@正在工作",self.name);
}

@end

二、繼承

子類繼承父類非私有的實例變量、所有方法的聲明和實現(xiàn)以及協(xié)議,并且可以增添新的屬性以及對父類的方法進行重寫或添加。方法重寫時如果需要調(diào)用父類,使用super關(guān)鍵字。繼承具有單根性(不支持多繼承)和傳遞性。通俗地講就是虎父無犬子,而且青出于藍而勝于藍,子子孫孫無窮盡也!

繼承的優(yōu)勢在于避免冗余,大大提高了代碼的可重用性和可維護性。

接下來我們創(chuàng)建兩個Person的子類,分別為Doctor、Teacher:

#import "Person.h"

@interface Doctor : Person

@property (nonatomic, strong) NSArray *patients;

@end

#import "Doctor.h"

@implementation Doctor

- (void)work
{
    NSLog(@"%@醫(yī)生正在治病",self.name);
}

@end
#import "Person.h"

@interface Teacher : Person

@property (nonatomic, strong) NSArray *students;

@end

#import "Teacher.h"

@implementation Teacher

- (void)work
{
    NSLog(@"%@老師正在教學(xué)",self.name);
}

@end

三、多態(tài)

多態(tài)就是不同對象對同一方法的不同響應(yīng),其建立在繼承的基礎(chǔ)上(也就是同一父類的兩個不同子類調(diào)用某個父類的方法,有不同的實現(xiàn))。

當(dāng)我們用不同子類的實例對象調(diào)用Person的work方法時,輸出了不同的Log:

Doctor *david = [[Doctor alloc] init];
david.name = @"David";
[david work];
    
Teacher *paul = [[Teacher alloc] init];
paul.name = @"Paul";
[paul work];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容