接口 interface
接口不是类是一种引用数据类型,没有父子关系所以不可以使用protected权限修饰符
-
可以存放的内容
-
所有版本:抽象方法和静态常量
// 都是抽象方法,可以省略 public abstract void a1(); abstract void a2(); public void a3(); // 推荐写法 void a4(); // 静态常量 // public final static int A = 0; // 可以省略前面的修饰符 // 推荐写法 int A = 0;
-
1.8:加入静态方法和默认方法
// 静态方法 // 实现类不可以实现 static void a5() { System.out.println("这是InterfaceA的静态方法"); } // 默认方法 // default 不能省略 // 实现类可以实现可以不实现 // 作用:功能的扩展(如果需要加一个抽象方法那么所有实现类都要实现这个方法,但是默认方法则不用) public default void a6() { System.out.println("这是InterfaceA的默认方法"); } default void a6() { System.out.println("这是InterfaceA的默认方法"); }
-
1.9:加入私有方法
// 普通私有方法 // 实现类不可以实现 // 供默认方法调用(将默认方法中公有部分提取出来) private void a7() { System.out.println("这是InterfaceA的私有方法"); } // 静态私有方法 // 实现类不可以实现 // 供静态方法调用(将静态方法中公有部分提取出来) private static void a8() { System.out.println("这是InterfaceA的静态私有方法"); }
接口中的内容
- 接口实现类必须实现抽象方法
- 接口实现类可以实现默认方法也可以不实现(接口中的default不算权限修饰符,所以前面会默认添加public),供实现类调用或重写,作用是为了功能的扩展(如果需要加一个抽象方法那么所有实现类都要实现这个方法,但是默认方法则不用)
- 接口实现类可以直接访问接口中的静态常量(不用使用类名.静态常量)
- 静态方法是供接口直接调用,使用接口名.静态方法名调用
- 私有方法是为了提出默认方法中的重复代码,实现代码的复用
- 静态私有方法是为了提出静态方法中的重复代码,实现代码的复用
- 如果一个类实现了两个或多个接口时如果这些接口中有方法名相同的默认方法时必须重写这个默认方法
-
接口可以继承多个接口
如果继承的这些接口中有方法名相同的默认方法那么就必须先重写这些方法名相同的方法