接口和抽象类的区别

一、相同点

        都为抽象类,都不能被实例化。

接口的实现类和抽象类的子类都必须实现抽象方法。

二、不同点

1、interface需要用implement来实现,abstract则是用extends继承。

2、遵循:多实现单继承原则;即,interface可以实现多个,abstract只能继承单个。

3、abstract可以有私有方法,非抽象方法(无abstract修饰),但必须实现;interface不可以有私有方法,默认是public、abstract、default类型,不能声明private及protected的方法,不能定义方法体。可以是static的方法和属性,但违背了其作为接 口的作用而存在的宗旨,所以通常接口里面声明变量的话只允许读,不能修改,也就是使用static final修饰。

4、尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现:

这个选择有两点含义:

  • Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。
  • abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。

5、强调不同:interface强调特定功能的实现,而abstract class强调所属关系。 

6、abstract class是interface与Class的中介。


注:此文为个人学习经验,如有错误或者不好的地方,还望各位多多指正...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值