//
// 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 = [[Person
alloc]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
{
[self
eat];
_age =
50;
// 分类中可以直接调用原类中的成员变量
NSLog(@"黑人很会跳舞");
}
- (void)eat1
{
NSLog(@"黑人吃东西");
}
@end
版权声明:本文为博主原创文章,未经博主允许不得转载。