//
// main.m
// 继承
//
//
#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Cat.h"
#import "Dog.h"
#import "FeedMan.h"
int main(int argc, const char * argv[])
{
// Animal * animal = [Animal new];
//
// [animal eat];
//
// [animal sleep];
// //忘记引入头文件
// Animal * cat =[[Cat alloc]init];
//
// [cat eat];
// Cat * cat = [[Cat alloc]init];
//
// [cat catchMouse];
//
// Dog * dog = [[Dog alloc]init];
//
// [dog bark];
//
//父类指针保存子类对象。如何调用子类对象的方法?
// Animal * animal_cat = [[Cat alloc]init];
//
// FeedMan * man = [[FeedMan alloc]init];
//
// [man showName:animal_cat];
//[animal_cat eat];
// [animal_cat setName:@"Hello Cat"];
Animal * animal_dog = [[Dog alloc]init];
FeedMan * man = [[FeedMan alloc]init];
[man showName:animal_dog];
[man FeedAnimal:animal_dog];
//子类调用父类的方法,如何实现方法的不同性?
return 0;
}
//
// FeedMan.h
// 继承
//
#import "Animal.h"
@interface FeedMan : NSObject
-(void)showName:(Animal *)animal;
-(void)FeedAnimal:(Animal *)animal;
@end
//
// FeedMan.m
// 继承
#import "FeedMan.h"
#import "Dog.h"
#import "Cat.h"
@implementation FeedMan
-(void)FeedAnimal:(Animal *)animal
{
if ([animal isKindOfClass:[Dog class]] ) {
Dog * dog = (Dog *)animal;
[dog eat];
}
}
-(void)showName:(Animal *)animal
{
//能够动态的检測动物的类型用到的一个类?
if([animal isKindOfClass:[Dog class]])
{
//须要强制类型转换
Dog * dog = (Dog *)animal;
[dog bark];
}
else if ([animal isKindOfClass:[Cat class]])
{
Cat * cat = (Cat *)animal;
[cat catchMouse];
}
}
@end
//
// Animal.h
// 继承
#import <Foundation/Foundation.h>
@interface Animal : NSObject
{
NSString * _name;
int _age;
}
@property NSString * name;
@property int age;
-(void)eat;
-(void)sleep;
-(void)showAge;
@end
//
// Animal.m
// 继承
//
#import "Animal.h"
@implementation Animal
-(void)eat
{
NSLog(@"动物吃东西");
}
-(void)sleep
{
NSLog(@"动物睡觉了");
}
-(void)showAge
{
NSLog(@"小动物的年龄");
}
@end
//
// Dog.h
// 继承
//
#import "Animal.h"
@interface Dog : Animal
{
}
-(void)bark;
-(void)eat;
@end
//
// Dog.m
// 继承
//
#import "Dog.h"
@implementation Dog
-(void)bark
{
NSLog(@"小狗汪汪叫");
}
-(void)eat
{
NSLog(@"小狗吃东西");
}
@end
//
// Cat.h
// 继承
#import "Animal.h"
@interface Cat : Animal
{
}
-(void)catchMouse;
-(void)eat;
@end
//
// Cat.m
// 继承
//
#import "Cat.h"
@implementation Cat
{
}
-(void)catchMouse
{
NSLog(@"猫咪会捉老鼠!
"); } -(void)eat { NSLog(@"小猫吃小鱼"); } @end