接口和抽象类的理解

这几天一直在面试,还别说,不面不知道,一面吓死宝宝鸟… 抓狂,以前人家问我,你对java了解有多少,我一定会说,还可以,不就这么点东西,经过这两天的面试才知道自己是多么的肤浅!肤浅!!!。今天,我就面试中的一个经典问题:“谈谈你对抽象类和接口的理解”,跟大家来聊聊,说的不对的地方也欢迎大家来指正,在这里,我就不用代码的形式展示问题,重点在于理解。
一、抽象类
一般说到抽象类和接口的区别,说的最多的就是抽象类里面可以有非抽象方法而接口里只能有抽象方法。但是,我们有没有想过java这一面向对象的语言,为什么么要有抽象类这个东西呢,抽象类的作用是什么呢?接下来就讲讲我对此的理解。首先,举一个我看见过的例子来说,我们小时候的游戏“俄罗斯方块”,大家都知道俄罗斯方块他有几种不同的方块,有一个长条的,有一个田字的方块,还有两个奇奇怪怪的,他们都有一个共同的方法:翻转。作为面向对象的过程,我们在构建小方块时,肯定会先构建一个父类叫“方块”,然后不同形状的小方块都继承这个“方块”,为什么?当然是因为虽然小方块的形状不同,但是好多属性方法的都相同啊,比如他们的移动:左移、右移是一样的,他们的加速下落方法是一样的。不同的是他们的翻转是不同的,比如田字方块,他是没有翻转的,因为翻来覆去一样嘛,再比如长条方块它的翻转除了横着就是竖着呗。所以,结论来了,作为抽象类。肯定先构建一个抽象的父类public abstract class block,然后它有一个抽象方法翻转。再构建几个子类方块,实现翻转这一抽象方法。那么,有人就说了,我在父类里面直接写一个空方法体的翻转方法,子类覆写不就完了,酱紫都不用abstract了耶。但是,你有没有想过,如果我们不用抽象类,用一般的继承,你可能会认为父类block,在某个地方会实例化,完了你找遍所有的地方都没有找到,宝宝委屈,但宝宝不说。重点来了!抽象类的好处来了,当我看到  block类是抽象的时候,你肯定会关心它的抽象方法,因为你知道它的子类一定会重写它,我们会去找抽象类的引用,它一定会有多态性的体现。所以说,存在即合理!

二、接口
接口,大家都知道一个类可以实现多个接口,并且当一个类继承某个接口时,我们必须实现接口中定义的所有方法。现在,我们考虑不要接口的情况。那么类A要实现C、D、E三个方法,就要在本类中定义并实现这三个方法;同样,类B也要实现C、D、E这三个方法,那么我们也要在类B里面定义并实现三个方法,那么如果我们还有一百个一千个类要实现这些方法呢?此时,接口便诞生了。接口把多处都会用到的方法给抽象了出来,很显然符合面向对象的思想。可以说,接口是抽象类的一种极端表现。
第二点,接口的一个用途是分工,怎么说呢,比如制造一台电脑,组装人员说我要cpu,显示器,键盘,鼠标等等的东西。可组装电脑的人并不需要去制造这些东西,他只要有一些插槽,这边插内存条,这边插键盘,而内存条,键盘这些东西自然有专门的生产商来做。这就说明,组装的人只要提供接口告诉你我需要什么,而真正的内容就由专门的人去做,所以说,接口对于工作的分工也特别有好处。

好了,大家要是觉得我说的有什么不对的地方,欢迎讨论,因为我是一个小菜菜鸟。。。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值