//
// Cat.h
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
//
#import "Animal.h"
@interface Cat : Animal
{
float _height;
}
@property (assign,nonatomic)float height;
@end
//
// Cat.m
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
//
#import "Cat.h"
@implementation Cat
-(
void)printAnimalFood
{
NSLog(@"cat like to eat fish");
}
-(NSString *
)description
{
return [NSString stringWithFormat:
@"name=%@,age=%li,height=%.2f",_name,_age,_height];
}
@end
//
// Dog.h
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
//
#import "Animal.h"
@interface Dog : Animal
{
float _weight;
}
-(
void)printAnimalHaHa;
@property (assign,nonatomic) float weight;
@end
//
// Dog.m
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. 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];
//}
-(
void)printAnimalHaHa
{
NSLog(@"HaHa");
}
@end
//
// Animal.h
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. 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
//
// Animal.m
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
//
#import "Animal.h"
@implementation Animal
-(
void)printAnimalFood
{
NSLog(@"-----Animal");
}
-(NSString *
)description
{
return [NSString stringWithFormat:
@"name111=%@,age=%li",[self name],self.age];
}
@end
//
// main.m
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"
#import "Animal.h"
void showAnimalFood(Animal *
ani)
{
[ani printAnimalFood];
}
int main(
int argc,
const char *
argv[]) {
@autoreleasepool {
Dog *xiaohei =
[[Dog alloc] init];
xiaohei.name=
@"xiaogei";
xiaohei.age=
12;
xiaohei.weight=
12.6;
//[xiaohei description];
NSLog(
@"%@",xiaohei);
Cat *xiaomao =
[[Cat alloc] init];
xiaomao.name=
@"xiaomao";
xiaomao.age=
12;
xiaomao.height=
12.6;
//[xiaohei description];
NSLog(
@"%@",xiaomao);
//父类的对象指针可以指向子类的对象
//调用的方法看具体的对象类型,先从子类查找对应的方法实现,如果子类没有实现对应的方法,跳到父类查找对应的方法实现,如果父类没有实现对应的方法,再跳到父类的父类查找对应的方法实现.
Animal *ani =
xiaohei;
[ani printAnimalFood];
ani=
xiaomao;
[ani printAnimalFood];
showAnimalFood(xiaomao);
showAnimalFood(xiaohei);
//根据传入的不同的对象,做出不同的响应.多态
}
return 0;
}
转载于:https://www.cnblogs.com/0515offer/p/4582999.html
相关资源:数据结构—成绩单生成器