首页 > 代码库 > 说说我一直不理解的多态

说说我一直不理解的多态

    OC语言中,面向对象的三大特性:封装,继承,多态

   其实前两者相对好理解一点,最后一个多态性一直困扰这我很长时间,网上也搜了很多解释,明白例子的意思,但是核心概念还是不懂.

    可能是积累够了,今天有理解了一次,感觉有点懂了.

     解释多态之前,先解释一些前面两个概念.

      封装:就像是哆啦A梦的口袋,内部为什么会有那么的功能的宝贝,我们不知道,但是他得口袋有一个开口,可以伸手进去拿东西.口袋的内部实现就是封装,而开口就是接口,我们可以调用.

    继承:继承其实更简单一点,说白了就是,父类的东西,子类都有,都可以使用.汽车是一个类,宝马是汽车的一个子类,只要汽车有的,宝马都有.

    下面说说多态吧:

    先说一下多态的概念:

    多态性的定义是:同一操作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。

    干巴巴的概念,十分难以理解,下面我会通过两个例子(这两个例子也是看别人博客借来的,十分形象,我自己也想不起来更好地,所以就拿来用了)来解释.

      

Animal类的声明

 

Animal类的实现

 

Dog类继承自Animal

 

Dog类的实现

 

测试程序:

  

    上面的例子中,分别有三个对象,分别是,Dog类型的对象d,Animal 类型的对象a,Animal类型的对象a1.

这三对象,d,a,a1,我们都调用了eat这个方法.这时候让我们再回看一看概念:同一操作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果.

让我们只看后半句,不同对象(a,d,a1),收到相同的消息(eat),得到不同的结果,(最后打印的结果).

这后还有一个疑问,那就是怎么知道,eat消息呢,怎么判断这个eat是Dog中的还是Animal 中的呢?

  

    

说说我一直不理解的多态