java、C++、Objective-C中运行时多态的表现

 java、C++、Objective-C都是现在流行的面相对象的语言(OOP),而面相对象语言的三大特征是:1.数据的抽象,2.继承,3.多态性。而其中我觉得总重要,也是最难学的可能是多态性,如果不理解多态性,那可以说你还完全没有真正的学会OOP语言。多态性改善了代码的可组织性和可读性,同时也是创建的程序具有可扩展性,而且在实际开发中更是扮演着十分重要的地位,下面我来简单的介绍一下我对java、C++、Objective-C中多态性的理解。这里都是基于代码上的理解。

首先从C++开始,C++中多态性是通过virtual关键字实现的,先看代码和运行结果:

这里很清楚的可以看到doBuff(),这个函数根据不同的Circle、Rectangel对象调用了,它们各自的ease()函数,然而在调用函数前,doBuff()是根本不知到是调用Circle中的ease()还是Rectangle中的ease(),只有程序运行时才识别出来,因此多态也叫做运行时多态。倘若将关键字virtual去掉,那么打印的结果只有父类shape中的 “shape ease”,也就是说只调用了Shape中的ease()函数,这里就没有运行自动识别的功能了,也就没有了多态。

在java中和C++中有点不一样了,即使不需要关键字virtual也能实现多态性,因为java本身就是一门纯多态性语言,函数的动态绑定是自动的。java的这个特性使得java开发变的更加简单,下面来看看代码实现和打印结果:

main函数:

这里需要特别指明的是java中除了通过继承能实现多态性,还可以通过接口interface实现多态,而java中多态运用的最多的对方不是在继承上面,而正是在接口上,针对接口编程才是java真正强大的地方。为了省去敲代码的工作,这里我直接引用之前看的别人写的代码了:

代码很容易理解里我就不解释了,下面介绍Objective-C中的多态性。

Objective-C语言也是一门动态,其实现方式和java差不多,通过简单的继承也能实现多态性,下面来看看代码实现:

当然Objective-C还有另一种实现多态的机制,protocol(协议)它和java中的接口功能类似,也实现了多继承和运行时多态。实现原理和java中的接口差不多,这里我就不粘代码上来了,大家可以在自己xcode上实现。

通过上面对 java、C++、Objective-C三门语言多态的介绍,是不是对多态有了更清晰的认识呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值