//
// Animal.h
// IOS150617_ObjectiveC_父類指針指向子類對象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Animal : NSObject
{
NSString *_name;
NSInteger _age;
}
@property (copy,nonatomic)NSString *name;
@property (assign ,nonatomic)NSInteger age;
- (void)printAnimalFood;
@end
<pre name="code" class="objc">// Animal.m
// IOS150617_ObjectiveC_父類指針指向子類對象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import "Animal.h"
@implementation Animal
- (void)printAnimalFood
{
}
- (NSString *)description
{
return [NSString stringWithFormat:@"name = %@,age = %li",[self name],[self age]];
}
@end
// Cat.h
// IOS150617_ObjectiveC_父類指針指向子類對象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import "Animal.h"
@interface Cat : Animal
{
NSString *_colorOfCat;
}
@property (copy,nonatomic)NSString *colorOfCat;
@end
// Cat.m
// IOS150617_ObjectiveC_父類指針指向子類對象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import "Cat.h"
@implementation Cat
- (void)printAnimalFood
{
NSLog(@"Cat like to eat fish");
}
- (NSString *)description
{
return [NSString stringWithFormat:@"name = %@,age = %li,color = %@",_name,_age,self->_colorOfCat];
}
@end
// Dog.h
// IOS150617_ObjectiveC_父類指針指向子類對象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import "Animal.h"
@interface Dog : Animal
{
float _weight;
}
@property (assign,nonatomic)float weight;
@end
<pre name="code" class="objc">//
// Dog.m
// IOS150617_ObjectiveC_父類指針指向子類對象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import "Dog.h"
@implementation Dog
- (void)printAnimalFood
{
NSLog(@"Dog like to eat bone");
}
- (NSString *)description
{
return [NSString stringWithFormat:@"name = %@,age = %li,weight = %.2f",_name,_age,_weight];
}
@end
<pre name="code" class="objc">// main.m
// IOS150617_ObjectiveC_父類指針指向子類對象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Cat.h"
#import "Dog.h"
//多態,父類指針指向子類對象,
void printInfo(Animal *animal)
{
[animal printAnimalFood];
NSLog(@"%@",animal.description);
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
Dog *dog = [[Dog alloc]init];
dog.name = @"狗";
dog.age = 12;
dog.weight = 12.34;
[dog printAnimalFood];
NSLog(@"%@",dog.description);
//父類的對象指針指向子類的對象
//調用的方法看具體對象的類型,先從子類查找對應方法的實現,子類沒有實現對應的方法,跳到父類查找對應的方法實現,父類沒有實現對應的方法,再繼續向上追蹤到父類的父類
Animal *dogAnimal = dog;
[dogAnimal printAnimalFood];
NSLog(@"%@",dogAnimal.description);
Cat *cat = [[Cat alloc] init];
cat.name = @"貓";
cat.age = 10;
cat.colorOfCat = @"白色";
[cat printAnimalFood];
NSLog(@"%@",[cat description]);
Animal *catAnimal = cat;
[catAnimal printAnimalFood];
NSLog(@"%@",catAnimal.description);
NSLog(@"==========多態=========");
//多態,根據不同的對象,打印不同的結果
printInfo(cat);
printInfo(dog);
}
return 0;
}