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 中的呢?