黑马程序员--代码实现2 多态

来源:互联网 发布:图片浏览软件 编辑:程序博客网 时间:2024/06/05 17:10
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
  • 我试了试视频的代码,然后我把传给feed的形參类型改成了NSObject,这从逻辑上是没问题的,因为他是animal的父类。编译只是提示 NSObject may not resopond ,但是运行结果正确。                                                   

2015430星期四

下午9:49

然后我改回来了。接着把animal的eat方法给去掉了,既然oc是动态识别传给feed的对象的类的,而且它调用的dog的方法,所以我删了它。我觉得可以正常运行的,一样的结果。结果提示-[Animal eat]:unrecognized selector sent to instance。大家不觉得奇怪吗?我不知道怎么理解这个现象。

#import<Foundation/Foundation.h>

@interface Animal:NSObject

 

@end

 

@implementation Animal

//eat被我删了

@end

 

@interface Dog:Animal

- (void)eat;

@end

 

@implementation Dog

- (void)eat

{

    NSLog(@"Dog eat");

}

@end

 

@interface Cat:Animal

- (void)eat;

@end

 

@implementation Cat

- (void)eat

{

    NSLog(@"Cat eat");

}

@end

 

void feed(Animal *a)

{

    [a eat];

}

int main()

{

    [[Animalnew] eat];

    Dog*d=[Dog new];

    feed(d);

    return 0;

}

 

 可以看到如果想要一个方法多态,父类必须要有该方法。微笑

 多态的定义

多态与泛型(generic)

 多态实际上就是泛型。

 

  所谓泛型就是指我们不为特定的类型进行专门编码,而采用对不同类型进行通用编码的方式,无论是数据结果还是算法。 

 

 传统的泛型是指类似以Template function的方式使参数一般化,典型的应用是C++ STL,比如ListVector以及algorithm 

 

 OO已能通过接口(Interface)和抽象类(Abstract Class)进行真正意义上的泛型了。在我看来,这就是OO最精彩的地方,也就是多态的威力。而对于传统意义上的Generic,我始终觉得其作用已经今不如昔了。 

 

我想这段话已经把多态说的很清楚了。多态就是通用代码却可以工作在不同的类上。

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

0 0