多肽

2019-03-31  本文已影响0人  AmberAlbee

/*

多肽:多种形态

1>没有继承就不会有多肽

2>代码体现:父类类型的指针指向子类对象

3>如果函数或者方法中使用的父类类型的参数,那么可以传入父类和子类的对象

4>局限性:

1>>父类类型的变量,不能直接调用子类特有的方法,必须强转成子类的变量类型

*/

main.m

#import <Foundation/Foundation.h>

#import "Animal.h"

#import "Dog.h"

#import "Cat.h"

void eatanimal(Dog *d)

{

[d eat];

}

void eatanimal(Cat *c)

{

[c eat];

}

void eatanimal(Animal *a)

{

[a eat];

}

int main(int argc, const char * argv[])

{

Animal *animal = [Animal new];

Dog *dog = [dog new];

Animal *dog = [Dog new];  //  Dog吃东西

Animal *dog = [Animal new];  //  Animal吃东西

Animal *dog = [Cat new];  //  Cat吃东西

//  NSObject *dog = [Dog new];  //  报错 NSObject没有eat方法

[animal eat];

[dog eat];

Cat *cat = [Cat new];

Animal *cat = [Cat new];

[cat run];

Dog *dog = [dog new];

eatanimal(dog);

Cat *cat = [cat new];

eatanimal(cat);

Animal *animal = [animal new];

eatanimal(animal);

[dog test];

//  [animal test];  报错 animal无test方法

//  Animal *animal = [Animal new];  弱语法,Animal中无test方法,需要换成Dog强转

Animal *animal = [Dog new]; 

Dog *d = (Dog *)animal;

[d test];

return 0;

}


Animal.h

#import <Foundation/Foundation.h>

@interface Animal : NSObject

- (void)eat;

- (void)run;

@end


Animal.m

#import "Animal.h"

@implementation Animal

- (void)eat

{

NSLog(@"Animal——吃东西");

}

- (void)run

{

NSLog(@"Animal——跑起来了");

}

@end


Dog.h

#import "Animal.h"

@interface Dog : Animal

- (void)eat;

- (void)test;

@end


Dog.m

#import "Dog.h"

@implementation Dog

- (void)eat

{

NSLog(@"Dog——吃东西");

}

- (void)test

{

NSLog(@"调用了test方法");

}

@end


Cat.h

#import "Dog.h"

@interface Cat : Dog

@end


Cat.m

#import "Cat.h"

@implementation Cat

- (void)eat

{

NSLog(@"Cat——吃东西");

}

- (void)run

{

NSLog(@"Cat——跑起来了");

}

@end

上一篇 下一篇

猜你喜欢

热点阅读