接口和抽象类

前言

接口和抽象类看上去十分类似,但是深入挖掘的话会发现许多的异同。本文主要介绍了接口和抽象类的特点和异同。

一、抽象类特点

  • 抽象类和抽象方法都使用abstract关键字进行声明
  • 如果一个类中包含抽象方法,那么这个类必须声明为抽象类
  • 抽象类不能被实例化,只能被继承

二、接口特点

  • 接口是抽象类的延申
  • 在Java8之前,接口可以被看做一个完全抽象的类,即不能有任何的方法实现
  • 从Java8开始,接口可以拥有default方法实现,目的是为了方便接口演化
  • 接口的字段默认为public static final
  • 接口的方法默认为public。Java9开始允许将方法定义为private,但是只能作为当前接口其他方法的辅助方法,不能在接口外使用

三、二者差异

  • 抽象类提供了一种IS-A关系,接口更像是LIKE-A关系
  • 一个类可以实现多个接口,但是最多只能继承一个抽象类
  • 接口字段只能为static和final类型,而抽象类的字段没有限制
  • 接口成员只能为public类型,而抽象类的成员可以有多种访问权限

四、使用选择

1.使用接口

  • 需要让不相关的类都实现一个方法
  • 需要使用多重继承

2.使用抽象类

  • 需要在几个相关的类中共享代码
  • 需要能控制继承来的成员的访问权限,而不是都为public
  • 需要继承非静态和非常量字段

总结

本文简单介绍了两者特点及区别。在很多情况下,接口优于抽象类。因为接口没有抽象类严格的类层次结构要求,可以灵活地为一个类添加行为。并且从Java8开始,接口也可以有默认的方法实现,使得修改接口的成本降低。简而言之,抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值