oc基础之分类与协议(五)
来源:互联网 发布:bot的知识图谱数据api 编辑:程序博客网 时间:2024/05/29 10:10
例9:设计一个程序,要求包含分类和协议。
模块一
1.1 定义协议的源代码
#import <Foundation/Foundation.h>
@protocol doThings <NSObject>
//必须要实现的方法
@required
-(void)eat;
-(void)walk;
//可以选择实现的方法
@optional
-(void)work;
-(void)date;
@end
#import <Foundation/Foundation.h>
//引入要采纳的协议
#import "doThings.h"
//person类的声明
@interface person : NSObject<doThings>
@property int age;
@end
//分类的声明
@interface person (study)
-(void)study;
@end
2.2 知识点拓展#import "person.h"
@implementation person
//必须实现的方法
-(void)eat
{
NSLog(@"人正在吃东西");
}
-(void)walk
{
NSLog(@"人可以跑步");
}
//可以选择实现的方法
-(void)work
{
NSLog(@"人需要工作");
}
@end
//分类的实现
@implementation person (study)
-(void)study
{
NSLog(@"age= %d的人必须喜欢学习",_age);
}
@end
3.2 知识点拓展1)分类的实现-->新方法的实现必须写在@impementation与@end之间。
2)分类的使用主要事项-->分类只能增加方法,不能增加成员变量和@property;分类可以访问原来类中的成员变量;若分类和原来类出现同名的方法,优先调用分类中的方法;
3)非正式协议-->NSObject类创建的分类又叫非正式协议。非正式协议一半不需要进行实现,一半在子类中进行方法的重写。
模块四
4.1 主函数的源代码
#import <Foundation/Foundation.h>
#import "person.h"
#import "doThings.h"
int main(int argc,constchar * argv[]) {
@autoreleasepool
{
//创建一个对象
person *p = [personnew];
p.age = 18;
//调用对象方法
[p eat];
[p work];
[p walk];
//调用分类的对象方法
[p study];
}
return 0;
}
学习心得
1)在学习分类和协议的时候,觉得不仅它们之间有很多相似点,跟继承也很相似。在这篇博文中,通过比较学习,对相关知识掌握会更加深刻。
2)在分类和协议中,都只能增加方法,不能增加成员变量;而前面学习到的封装,则只对成员属性进行初始化和值的获取。这也是我在学习过程者的一个意外的收获。
- oc基础之分类与协议(五)
- OC学习Runtime之协议与分类
- oc学习笔记之协议与分类
- oc 分类与协议
- OC基础8:分类和协议
- Runtime(五)协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- Objective-C Runtime 运行时之五:协议与分类
- 1035. 插入与归并(25)
- C语言位运算
- HDU 1009 FatMouse' Trade
- APK反编译二次打包实例-消除apk底部广告
- fields must be fully assigned before control is returned to the caller解决方案
- oc基础之分类与协议(五)
- [leetcode151] Reverse Words in a String
- 1017. A除以B (20)
- 代理模式
- 简单的Java入门代码
- SQLServer2008/2005 生成数据字典SQL语句
- 字符串列表的使用
- APK反编译二次打包实例-修改apk文字和图片
- java基础-Java之泛型