今天簡單總結(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];