为什么要用接口?

我们可以来看看下面这个例子   :

 现有狗和企鹅两个类  ,狗会玩飞碟,企鹅会游泳,为什么要把玩飞碟和游泳的方法分别定义在两个接口里?

如果定义在接口反而显得代码更加累赘,因为还多了两个接口。你可能会想,干嘛不直接把玩飞碟的方法直接定义在狗类中,游泳的方法直接定义在企鹅类中。

假设这样一种情况:后面又多了一种宠物类型鸭子,鸭子也会游泳,你是不是又要在鸭子类中定义一个游泳的方法?在这里考虑一下这个问题:企鹅会游泳,鸭子会游泳,具有共同的特性,既然有共同的特性,为什么不去抽取?抽取出一个父类。

对,没错,你可能会抽取出一个父类A,这个父类中有一个游泳的方法,然后鸭子类和企鹅类都继承这个父类。(看起来毫无问题)。

接着继续,后面我们又发现,鸭子会唱歌了(呱呱呱),你又养了一种新的宠物鹦鹉,而且鹦鹉也会唱歌(嘤嘤嘤),到这里,你又发现鸭子和鹦鹉具有共同的特性(唱歌),那就得继续向上抽取,在这个你会想,能不能把唱歌这个方法定义在刚才的A类中,仔细想想,这样行不通(如果是把唱歌这个方法定义在A类中,刚才企鹅也继承了A类,那不就企鹅也会唱歌了【显然不理】)


那就换种方式试试:把唱歌这个方法定义在另一个类中(B),然后鹦鹉类继承B类,鸭子类也继承B类(好,这里就出现问题了:鸭子已经继承了A类了,不能再继承B类了,因为类只能单继承,又出现问题了。在这里联想一下,什么可以多继承【实现】,当然是接口了),经过上面的思考,最终决定:把唱歌,游泳,这些方法分别定义在不同的接口里,然后鸭子类去实现有唱歌方法的接口,同时也去实现具有游泳方法的接口,鹦鹉类去实现有唱歌方法的接口,这样鸭子既会游泳也会唱歌,鹦鹉也会唱歌,狗会玩飞碟,企鹅会游泳,在这里接口的好处就体现出来了,更加的灵活,方便程序的拓展。在这个例子中,接口体现的是一种能力(类实现了某个接口,这个类就具备了该接口的方法【功能】)

本文链接:https://blog.csdn.net/qq_34343303/article/details/81710240

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值