Object-C支持多继承吗?可以实现多个接口吗?Category是什么?
转自: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的方法。那么怎么办呢?是不是可以写一个同名的方法代替原来的方法呢,答案是可以的。这个新的方法必须和继承的方法有相同的返回类型和参数类型和数目,方法的名字是一样的。