接口与抽象类的区别【详说】

接口与抽象类的区别

区别一

抽象类只能单继承,接口能多实现

区别二

抽象类是一个类,可以被任意权限修饰符修饰,静态和非静态属性,final和非final属性,可以有非抽象方法;但接口中的方法不能实现(Java8中才开始有默认实现,Java9引入私有方法),默认public修饰。而且接口只能由static、final变量,而抽象类则不一定。

区别三

抽象的事物不同

  • 抽象类是对整个类的抽象,包括属性(主要)和行为
  • 接口是对类的行为(局部)进行抽象

区别四

定义的时候,定义抽象类和接口的思想不同

  • 设计抽象类是自下而上的过程,我子类需要,所以我定义抽象类
  • 设计接口是自上而下的过程,我接口规范某一行为,我某类需要这个行为,我实现某接口

区别五

设计层面不同

  • 抽象类是模板式设计
  • 接口是辐射式设计

核心:继承是 “是不是“(is-a)的关系,而接口实现则是 “有没有“(has-a)的关系。

打个比方:

  • 抽象类
    • 有个Person的抽象类,有个Student的类去继承Person。
    • 这个学生是学生,也是人。
  • 接口
    • 我们可以写一个GoodAt接口,表明擅长的科目,里面写个goodAt()方法
    • 再写几个不同的xxxGoodAt实现该接口
    • 在Student类里写上成员GoodAt,在需要实现是new不同的
      • GoodAt goodAt = new SamGoodAt();
      • GoodAt goodAt = new AmyGoodAt();
    • Sam有擅长数学的能力,Amy有擅长英语的能力

往深了说,我们还能讲到“设计模式”中的第一个最核心关键的**【策略模式】**

  • 面向接口编程,而不是面向实现编程。
  • 更多的选择组合,而不是继承

面向接口编程,有很好的可拓展性,可维护性,方便我们开发者去修改

  • 对于那些确认不变的,我们写在父类里,去继承就好了
  • 而那些具有可变因素的,接口应该是我们的首选,制定好一套行为规范,以不变应万变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值