搞清抽象类和接口的区别

尊重原创,转载请注明出处。


          抽象类与接口是Java中很容易被混淆的内容,他们表面看起来很相似,所以可能会有人把他们当一个东西去使用,其实他们表面使用起来就有区别,如果是从设计角度去看他们的本质,更是有着根本的区别。


      首先我们看看抽象类与接口之间表面上的区别,那就是抽象类里面包含常量,已实现的方法和抽象函数,而接口里面只能是包含一个一个接口函数,而且只要是承接了这个接口类,那他里面的必须实现接口类里面的每一个方法,也就是说表面上看接口甚至是一个“极致抽象”的抽象类。


      那么从顶层设计来看看这两者的区别可能更能看出Java设计这两种不同东西的意图,以及他们更本质的区别:

      

    抽象类的话本质上是对一个事物或者说类的抽象,抽象类就是用来继承的,所以抽象类基本上是用来做基类的,还是举个例子来说明吧,比如飞机,分客机,战斗机,直升机,航天飞机,他们之间既有共同的特点,也有自己所特有的特性。这个时候,这些飞机所包含的这些零件(常量),所具有的相同的功能,如都能飞,但是飞的方式不同(抽象函数),这些东西就是对飞机抽象出来的东西,可以构成一个抽象类,每个类可以继承这个抽象类,然后去实现里面的抽象函数,实现各自不同的飞法。


     但是这些飞机毕竟有各自不同的地方,如战斗机可以发射炮弹,这是其他飞机所没有的功能,所以如果把发射炮弹函数也写到抽象类里显然是不合适的,因为其他飞机并没有这个功能,那么改如何改战斗机加上炮弹的功能呢,这其实就是接口的作用,就是加功能的作用,即接口是对行为功能的一种抽象。

    

     所以说抽象类一般是对某一类事物所共同具有的这一类事物的特性的一个抽象,作为几个子类的一个父类,这种设计有个好处就是,当几个子类里面所相同的东西需要发生变动的时候,只要修改一下他们的父类抽象即可,不需要一个一个去修改子类。

  而接口是给这些子类在父类所共同具备的东西上根据自身不同的特性给自己加上各自的功能,即承接不同的接口,接口也起到设计功能的作用,即只要接口里面的东西变了,则承接这个接口的类也必须改变。


   所以从顶层设计上来看,抽象类和接口还是有本质上的不同的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值