interface关键字用于声明一个接口
1.接口如何定义
修饰符列表 interface 接口名{ }
2.接口在java中表示一种规范或契约,它定义了一组抽象方法和常量,用来描述实现这个接口的类应该具有哪些行为和属性,接口也属于一种引用数据类型
3.抽象类是半抽象的,而接口是完全抽象的。接口没有构造方法,也无法实例化
4.在JDK8之前,接口中只能定义常量和抽象方法。修饰常量的static final可以省略不写,修饰抽象方法的abstract也可以省略不写,接口中所有的属性和方法都是public公开的(public也可以省略)
5.接口与接口之间不仅支持单继承,还支持多继承
6.类和接口之间的关系叫做实现,用implements来进行接口的实现
7.一个非抽象的类实现接口时,必须将所有的抽象方法全部实现
8.一个类可以实现多个接口,例如 class A implements interface B, interface C{ }
9.JDK8之后(包括JDK8),接口中允许定义默认方法和静态方法
为什么出现这种新特性?
引入默认方法是为了解决接口演变的问题:"接口可以定义方法,但不能实现方法,当一个类实现接口时,必须实现它的所有抽象方法",这就导致出现了接口升级的问题:"当接口删除或添加方法时,这会破坏所有类的实现,所有该接口的用户必须修改代码才能适应更改",这就是所谓的“接口演变”问题
默认方法: 即使实现了该接口的类没有提供该方法的实现,也可以有默认的行为。默认方法使用default关键字来定义。
静态方法:JDK8之后规定,接口中可以定义静态方法,但是这个静态方法只能通过"该接口名."去调用,别的都无法调用!
10.JDK9之后,接口中允许定义私有的实例方法和私有的静态方法
私有实例方法主要用于辅助接口中的默认方法。它们不能直接被接口的实现类或外部类调用,只能被接口内部的默认方法,或其他私有方法调用
私有静态方法主要用于辅助接口中的默认方法或静态方法。它们与私有实例方法类似,但不需要接口的实例即可调用。它们通常用于封装复杂的逻辑或实现工具方法。
11.所有的接口都隐式的继承Object类,因此接口可以调用Object类中的方法
12.当同时出现extends和implements时,extens在前,implements在后
例如 class A extens B implements C
13.接口之间即使没有继承关系,也可以进行转型,但是运行时可能会出现ClassCastException,要用instanceof运算符进行判断