/**
* @author 麦子, 15-09-26 12:09:57
*
* 抽象类IOS这边无法规定子类必须实现一个方法,这边只是一个警号,编译依然能过。所以感觉无法控制编写代码的规范。
具体的就是。 通过父类实现对应的协议, 其中必须实现的也就是java中的抽象方法。 而可选实现的方法,也就是java中的实现的方法。
*/
int main(int argc, const char * argv[]) {
@autoreleasepool {
Animal *cat = [[Cat alloc] init];
[cat animalType:@"猫"];
NSLog(@"-------------------");
Animal *dog = [[Dog alloc] init];
[dog animalType:@"狗"];
}
return 0;
}
#import <Foundation/Foundation.h>
@protocol AnimalProtocol <NSObject>
- (void)eat;
- (void)play;
@optional
- (void)animalType:(NSString *)animalName;
@end
#import "Animal.h"
@implementation Animal
- (void)animalType:(NSString *)animalName{
[self eat];
[self play];
NSLog(@"这是一只%@",animalName);
}
@end
#import "Cat.h"
@implementation Cat
- (void)eat{
NSLog(@"喜欢吃鱼");
}
- (void)play{
NSLog(@"玩耗子");
}
@end
#import "Dog.h"
@implementation Dog
- (void)eat{
NSLog(@"喜欢吃骨头");
}
- (void)play{
NSLog(@"喜欢玩球");
}
@end
打印结果如下:
2015-09-26 13:05:40.031 设计模式_ios抽象类理解[2861:454758] 喜欢吃鱼
2015-09-26 13:05:40.032 设计模式_ios抽象类理解[2861:454758] 玩耗子
2015-09-26 13:05:40.032 设计模式_ios抽象类理解[2861:454758] 这是一只猫
2015-09-26 13:05:40.032 设计模式_ios抽象类理解[2861:454758] -------------------
2015-09-26 13:05:40.033 设计模式_ios抽象类理解[2861:454758] 喜欢吃骨头
2015-09-26 13:05:40.033 设计模式_ios抽象类理解[2861:454758] 喜欢玩球
2015-09-26 13:05:40.033 设计模式_ios抽象类理解[2861:454758] 这是一只狗