JAVA接口

什么是Java接口

接口(英文:Interface),在JAVA中表示一个抽象类型,是抽象方法的集合,接口通常以interface关键字声明,接口可以被继承、实现。
接口和普通的Java类不用,但是也有相似之处,类可以说是对一种事物的描述,通常以类的属性和方法来描述事物的属性以及特征(也可以说是行为),但通常接口更强调统一的协议规范,或者说是一种约束,它是一种更高级别的抽象,实现接口的类需要实现所有的抽象方法,否则该类也必须是抽象类。

接口的特性

  • 接口不能被直接实例化
  • 接口没有构造方法
  • 接口支持多继承
  • 接口的方法默认被隐式的声明为public abstract
  • 接口中的变量都被隐式的声明为public static final
  • 接口中的变量以及方法只能被public修饰
  • 接口中变量都必须是常量,不能包含成员变量
  • 接口中不能含有静态代码块

抽象类与接口的区别

  • 抽象类需以abstract关键字声明
  • 抽象类有构造方法
  • 抽象类中可以有方法体、静态代码块
  • 抽象类中可以有成员变量
  • 抽象类中的属性和方法没有访问修饰符的限制
  • 一个类只能继承一个抽象类,但可以实现多个接口

JDK1.8后的改变

在JDK1.8之前,接口中只能有抽象方法,但是JDK1.8后对接口新加了一些特性,使得接口中可以包含实现方法。
  • 新增关键字default,被此关键字修饰的方法拥有方法体,即为实现方法,所有继承或实现此接口的接口或类,都会默认继承此方法
  • 接口中可以有静态方法,即static修饰的方法,接口的静态方法只能通过接口名称调用,其实现类不可以调用此方法。

加入这些新特性有什么好处?
我们知道在实际的编程运用中,推荐使用接口编程,因为这样可以充分体现Java语言中的多态性,想一想当没有这些新特性的时候,一个接口在实际运用中或许被很多个类实现,类实现了接口后就要实现该接口的所有抽象方法。
在后期开发中,如果在某一个接口中新加一个抽象方法,则需要在所有实现类中去写该方法的实现,这无疑是一个很大的工作量,但是有了default修饰的方法就不一样了,default方法会被默认实现,所有继承或实现此接口的接口或类,都会默认继承此方法,即使在后期开发中在接口中需要新定义一个方法,只需要定义为default方法,然后在实现类中选择性的重写方法即可。

接口的实现

重写接口中声明的方法时,需要注意以下原则:

  • 类在实现接口方时,不能抛出强制异常,只能在接口中抛出该强制性异常
  • 类在重写方法时要保持方法名的一致,并且保持相同或者兼容的返回值类型
  • 如果抽象类实现接口,则没必要实现该接口的所有抽象方法

标记接口

有些接口不包含任何的方法和变量,它仅作为一种标记使用。
简单的来说就是给某个对象打个标签,使对象拥有某些特权。
标记接口主要用于以下两种目的:

  • 建立一个公共的父接口:
    比如java.util.EventListener接口,如果某个接口继承了该接口,JVM就知道该接口将要被用于一个事件的代理方案。

  • 体现多态性
    类通过实现接口类型,可以将此类型的对象转为接口类型,从而实现类的多态性。

注脚1


  1. 此文章用于个人学习及记忆,部分内容借鉴于网站菜鸟教程,若有不恰当之处,欢迎大家指正。 ↩︎

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值