A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 悟中生有 中级黑马   /  2014-4-9 15:32  /  1186 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 悟中生有 于 2014-4-9 16:11 编辑

可以创建分类的对象吗?
这一点有点迷惑,求解?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

7 个回复

倒序浏览
分类是对原来类的方法的扩展,创建原来类的对象,就自动有了分类的方法了。
回复 使用道具 举报
本帖最后由 程浩 于 2014-4-9 15:56 编辑

分类:可以给某一个类扩充一些方法(不修改原来类的代码)
在不改变原来类内容的基础上,可以为类增加一些方法
注意:
1.不可以扩充成员变量,只能加方法
2.在分类方法的实现中可以访问原来类中声明的成员变量
3.分类优先级最高,当调用一个方法:分类(最后参与编译的分类优先)---->原来类---->父类
4.如果多个分类扩展实现了同一个方法,则最后编译的点m文件覆盖前面的方法,被先调用。
这就是说,不是新建一个对象使用分类方法,而是使用原来的对象来使用分类中的方法

相当于,你修建了一条铁路,本来只能跑拉煤的火车,现在,你要跑高铁,你只需要造一个高铁,把高铁放到上面就行了
  1. //声明
  2. Person+mj.h中:
  3. #import "Person.h"
  4. @interface Person (MJ)
  5. - (void)study;
  6. @end
  7. //实现
  8. Person+mj.m中:
  9. #import "Person+mj.h"
  10. @implementation Person (MJ)   //一般写分类模块名称
  11. - (void)study
  12. {
  13.         NSLog(@"学习-------");
  14. }
  15. @end
  16. //调用
  17. #import <Foundation/Foundation.h>
  18. #import "Person.h"
  19. #import "Person+mj.h"
  20. int main()
  21. {
  22.         Person *p = [[Person alloc] init];
  23.         [p test];//person中有的方法
  24.         [p study];//在不改变person类的声明实现,当不能实现继承时,可以通过分类来添加方法
  25.         return 0;
  26. }
复制代码





评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
周宇华 发表于 2014-4-9 15:50
分类是对原来类的方法的扩展,创建原来类的对象,就自动有了分类的方法了。 ...

是的 分类是这样使用的,可是我想知道的是为什么分类不能创建对象呢?
回复 使用道具 举报
悟中生有 发表于 2014-4-9 16:02
是的 分类是这样使用的,可是我想知道的是为什么分类不能创建对象呢?

分类是对类的方法扩充,他不是类,所以不能创建对象。
回复 使用道具 举报
程浩 发表于 2014-4-9 15:51
分类:可以给某一个类扩充一些方法(不修改原来类的代码)
在不改变原来类内容的基础上,可以为类增加一些 ...

谢谢指教!我想弄明白的是分类为什么不能创建对象,,,
回复 使用道具 举报
周宇华 发表于 2014-4-9 16:04
分类是对类的方法扩充,他不是类,所以不能创建对象。

也就是说分类只是原类的一个扩展功能吧!
回复 使用道具 举报
悟中生有 发表于 2014-4-9 16:08
也就是说分类只是原类的一个扩展功能吧!

对。就是这样。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马