学习Java我们知道类有三大特征,封装,继承,多态.而在Objective-C中也有继承的概念,今天就来看看Objective-C中的继承和多态.
首先,我们来看看示例代码:
//Animal.h
#import <Foundation/Foundation.h>
@interface Animal : NSObject
{
int food_consumption; //食量
int count; //数量
int parturition_days; //生产周期
}
-(int)count;
-(void)setCount:(int)c;
-(int)foodConsumption;
-(void)setFoodConsumption:(int)food_c;
-(int)parturitionDays;
-(void)setParturitionDays:(int)parturition_day;
@end
//Animal.m
#import "Animal.h"
@implementation Animal
-(int)count{
return count;
}
-(void)setCount:(int)c{
count = c;
}
-(int)foodConsumption{
return food_consumption;
}
-(void)setFoodConsumption:(int)food_c{
food_consumption = food_c;
}
-(int)parturitionDays{
return parturition_days;
}
-(void)setParturitionDays:(int)parturition_day{
parturition_days = parturition_day;
}
@end
//Panda.h
#import "Animal.h"
@interface Panda : Animal
@end
//Panda.m
#import "Panda.h"
@implementation Panda
@end
//Tool.h
#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Panda.h"
@interface Tool : NSObject
+(void) initWithAnimalDictionary:(Animal *)animal andDict:(NSDictionary *)dict;
@end
//Tool.m
#import "Tool.h"
@implementation Tool
+(void) initWithAnimalDictionary:(Animal *)animal andDict:(NSDictionary *)dict{
NSDictionary *animalDict;
if(YES == [animal isKindOfClass:[Panda class]]){
animalDict = [dict objectForKey:@"Panda"];
}else{
NSLog(@"error class!");
}
[animal setCount:[[animalDict objectForKey:@"count"] intValue]];
[animal setFoodConsumption:[[animalDict objectForKey:@"food_consumption"] intValue]];
[animal setParturitionDays:[[animalDict objectForKey:@"parturition_days"] intValue]];
}
@end
data.plist文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>fodder</key>
<dict>
<key>count_num</key>
<string>1024</string>
</dict>
<key>Panda</key>
<dict>
<key>food_consumption</key>
<string>2</string>
<key>count</key>
<string>6</string>
<key>parturition_days</key>
<string>76</string>
</dict>
</dict>
</plist>
//main.m
#import <Foundation/Foundation.h>
#import "Tool.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
Panda *panda = [[Panda alloc] init];
//读取plist
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
[Tool initWithAn