Object-C支持多继承吗?可以实现多个接口吗?Category是什么?
2014-02-15 18:21
537 查看
转自: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的方法。那么怎么办呢?是不是可以写一个同名的方法代替原来的方法呢,答案是可以的。这个新的方法必须和继承的方法有相同的返回类型和参数类型和数目,方法的名字是一样的。
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的方法。那么怎么办呢?是不是可以写一个同名的方法代替原来的方法呢,答案是可以的。这个新的方法必须和继承的方法有相同的返回类型和参数类型和数目,方法的名字是一样的。
相关文章推荐
- Cocoa、Foundation、UIKit、Objective-c、XCode、Interface Builder的概念
- nil、Nil、NULL、NSNull 的区别
- id ,NSObject, id<NSObject>区别
- 【深入浅出Objective-C】UINavigationController
- Exception starting filter struts2 java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor
- Objective-C相关Category的收集
- Object C学习笔记9-字符串NSMutableString
- 【Objective-C】OC中单例设计模式讲解
- 【Objective-C】OC中单例设计模式讲解
- opensuse 13.1 virtualbox error:This parameter must be a string or Unicode object
- Object C学习笔记8-字符串NSString之二
- Object C学习笔记8-字符串NSString之二
- instancetype、id、NSObject的区别
- IOS 通过Objective-C读取、解析Excel
- 【Objective-C】OC中自定义对象的归档基本概念和使用方法(实现NSCoding协议)
- 【Objective-C】OC中自定义对象的归档基本概念和使用方法(实现NSCoding协议)
- Objective-C中使用NSValue、NSNull、NSNumber、NSDecimalNumber、NSData、NSMutableData
- org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject
- 使用GetItemById出错“Detected use of SPRequest for previously closed SPWeb object.”
- 为磁盘目录授权出现:malloc: *** error for object xx: pointer being freed was not allocate问题解决