接口
接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来
语法:
interface 接口名{
//属性
//方法(在接口中,抽象方法,可以省略abstract关键字)
//在jdk8后,可以有默认实现方法,需要使用default关键字修饰default public void hi(){}
//在jdk8后,可以有静态方法public static void hi(){}
}
如果一个类 implements 实现 接口
需要将该接口的所有抽象方法都实现
class 类名 implements 接口{
//自己的属性
//自己的方法
//必须实现的接口的抽象方法
}
小结:接口中可以有 抽象方法,默认方法,静态方法
接口使用细节
1.接口不能被实例化
2.接口中所有的方法是public方法,接口中的抽象方法,可以不用abstract修饰
3.一个普通类实现接口,就必须将该接口的所有方法都实现
4.抽象类实现接口,可以不用实现接口的方法
5.一个类同时可以实现多个接口
6.接口中的属性,只能是final的,而且是public static final修饰符 比如: int a = 1;实际上是 public static final a = 1;(必须初始化)
7.接口中属性的访问形式是:接口名.属性名
8.一个接口不能继承其他的类,但是可以继承多个别的接口 interface A extends B,C{}
9.接口的修饰符 只能是 public 和默认
接口和继承
子类继承了父类,就自动的拥有了父类的功能
如果子类需要扩展功能,可以通过实现接口的方式扩展
可以理解 实现接口 是 对java 单继承机制的一种补充
接口和继承解决的问题不同
继承的价值主要在于:解决代码的复用性和可维护性
接口的价值主要在于:设计,设计好各种规范(方法),让其它类去实现这些方法
接口比继承更加灵活
继承满足的是 is-a的关系,而接口只需要满足like-a的关系
接口在一定程度上实现代码的解耦(接口规范性+动态绑定)
接口的多态特性
1.多态参数
2.多态数组
3.接口存在多态传递现象
public class InterfacePolyPass {
public static void main(String[] args) {
//接口类型的变量可以指向,实现了该接口的类的实例对象
IG ig = new Teacher();
//如果IG继承了IH接口,而Teacher类实现了IG接口
//那么,实际上就相当于Teacher类也实现了IH接口
IH ih = new Teacher();
}
}
interface IH{
void hi();
}
interface IG extends IH{}
class Teacher implements IG{
@Override
public void hi() {
}
}