標籤:ios objective-c 開發 筆記 物件導向
//
// main.m
// 使用繼承來擴充類
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
/*
當在一個類中有太多的方法會顯得非常複雜,為了清楚表示,我們可以建立類的一個分類(category)來擴充這個類
在其他物件導向語言中,使用繼承關係類擴充一個類,然而這樣最大的壞處就是耦合性太高
OC使用(category)來擴充一個類
注意:1. 只要在原類中產生的成員變數(私人變數除外)在分類中都可直接存取
2. 如果在分類中定義實作類別了與原類同名的方法,那麼原類中的方法相當於被覆蓋掉了(實際開發中,最好不要出現方法覆蓋)
3. 不能在分類中定義成員變數,只能增加方法
*/
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Person+BlackPerson.h"
int main(int argc,const char * argv[]) {
@autoreleasepool {
Person *p = [[Personalloc]init];
[p eat];//這裡調用了eat方法,運行可見是列印“黑人吃東西”,所以方法被覆蓋了
}
return 0;
}
//
// Person.h
// OC的特有文法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person :NSObject
{
int _age;
}
@property (nonatomic,assign)int age1;
@property (nonatomic,strong)NSString *name;
//人類的基本方法
- (void)eat;
- (void)drink;
- (void)smile;
@end
//
// Person.m
// OC的特有文法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)eat
{
NSLog(@"人類吃東西");
}
- (void)drink
{
NSLog(@"人類喝東西");
}
- (void)smile
{
NSLog(@"人類微笑");
}
@end
//
// Person+BlackPerson.h
// OC的特有文法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Person.h"
@interface Person (BlackPerson)
- (void)popping;
- (void)eat1; // 這裡 覆蓋了Person類中的eat方法
@end
//
// Person+BlackPerson.m
// OC的特有文法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Person+BlackPerson.h"
@implementation Person (BlackPerson)
- (void)popping
{
[selfeat];
_age =50; // 分類中可以直接調用原類中的成員變數
NSLog(@"黑人很會跳舞");
}
- (void)eat1
{
NSLog(@"黑人吃東西");
}
@end
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
小白學開發(iOS)OC_ 使用繼承來擴充類(2015-08-07)