转自:http://blog.sina.com.cn/s/blog_7afd7d7801016t3t.html

Object-C支持多继承吗?可以实现多个接口吗?Category是什么?重写一个类的方式是继承好还是分类好?为什么?

Object-C不支持多继承。我们可以通过ios中无处不在的@protocol委托方式来实现。协议是多个类共享的一个方法列表,在协议中所列出的方法没有响应的实现,由其它人来实现。

@protocol MyDelegate
-(void)buyIphone:(NSString *)iphoneType money:(NSString *)money;

@end
@interface My : NSObject
{
id deleage;
}
@property(assign,nonatomic)id delegate;

@end

代码中声明了一个协议 名叫Mydelegate,在其中有一个buyIphone方法,即一个委托项。当我要购买手机的时候只需要通过delegate 调用 BuyIphone方法即可.

-(void)willbuy
{
[delegate buyIphone:@"iphone 4s" money:@"4888"];

}

我不必关心谁现实了这一委托,只要实现了这个委托的类,并且buyIphone是声明的委托中必须实现的方法,那么就一定能够得到结果.

#import
#import"My.h"
@interface Business : NSObject

@end

然后在 @implementation Business 中调用 buyIphone方法

#import"Business.h"

@implementation Business

-(void)buyIphone:(NSString *)iphoneType money:(NSString *)money
{
NSLog(@"手机有货,这个价钱卖你了,发货中!!");
}

@end

Object-C是可以实现多接口的

Category (分类)可以拓展这个类.添加额外的方法.
Category(分类)使得在不修改该类原先代码的情况下.拓展或者修改现有类的定义.并且是向下有效的.既会影响到该类所有 子类.

重写一个类的方式用继承还是分类.取决于具体情况.假如目标类有许多的子类.我们需要拓展这个类又不希望影响到原有的代码.继承后比较好.
如果仅仅是拓展方法.分类更好.(不需要涉及到原先的代码)

继承和重载有什么区别呢?

继承可以扩展方法,也可以扩展实例变量,类目是不能扩展实例变量的,重载能删除已有的方法

例如:两个类。一个类classb 要 为自己编写一个方法,buyIphone ,但是这个classb已经继承这个classa的方法。那么怎么办呢?是不是可以写一个同名的方法代替原来的方法呢,答案是可以的。这个新的方法必须和继承的方法有相同的返回类型和参数类型和数目,方法的名字是一样的。

最新文章

  1. 【C#】VS2015开发环境的安装和配置(三)2016-08-03更新
  2. Jquery easyui中的有效性检查
  3. 【bzoj1037】生日聚会
  4. 如何通过源码生成Gatling可执行工具
  5. HDOJ2029Palindromes _easy version
  6. React:用于搭建UI的JavaScript库
  7. javaScript的select元素和option的相关操作
  8. HDU4323-Magic Number(levenshtein distance-编辑距离)
  9. ADO.NET基础笔记
  10. NHIBERNATE的简单框架的设计
  11. tampermonkey,采用js解析自定义脚本,实现网页列表数据采集分析
  12. 命令控制台与java环境配置
  13. JAVA提高三:反射总结
  14. javascript 中遍历数组的简单方法
  15. MongoDB最佳实践中文手册
  16. SQL Server 扩展事件(Extented Events)从入门到进阶(2)——在GUI中创建基础扩展事件
  17. 153. Find Minimum in Rotated Sorted Array找其中的最小值
  18. mysql sysbench基准测试
  19. Linux下EC20实现ppp拨号(转)
  20. 数据库 proc编程四

热门文章

  1. Redis事务为什么不支持回滚
  2. jetty7.6运行struts2项目问题解决
  3. 把Java数组转换为List时的注意事项
  4. Android4.2.2 Gallery2源码分析(2)——发现Gallery.java
  5. Cognos开发ContentManagerServiceStub不能转换为Stub
  6. win8.1安装开发工具 vs2015 Visual Studio 2015 Preview Downloads
  7. 使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台
  8. struts脚本调用action,页面第一次访问不调用
  9. HTTP浏览器缓存机制
  10. test推荐到极客头条002