小白学开发(iOS)OC_ 使用继承来扩充类(2015-08-07)
2015-08-13 10:01
423 查看
//
// 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
// 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
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 如何成为一名专家级的开发人员
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- AS3自写类整理笔记 ClassLoader类第1/2页
- AS3自写类整理笔记 Dot类第1/2页
- DB2新手使用的一些小笔记:新建实例、数据库路径不存在、客户端连接 .
- Lua编程示例(二):面向对象、metatable对表进行扩展
- C#中面向对象编程机制之多态学习笔记
- 浅谈Lua的面向对象特性
- Lua面向对象之类和继承浅析
- JavaScript面向对象的两种书写方法以及差别
- 浅谈c# 面向对象之类与对象
- C#面向对象特征的具体实现及作用详解
- C# 面向对象的基本原则
- 浅谈对c# 面向对象的理解