企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
#### 特性 * 接口中的所有方法和变量都被隐式的声明为public; * 接口中的变量被隐式的声明为\(public static final\); * 如果类实现了某个接口,但是没有实现该接口的全部方法,那么该类必须定义为abstract; * 一个类可以实现多个接口 * 如果一个类实现了一个接口,但是没有实现接口的全部方法,那么该类必须定义为abstract * 可以将接口声明为某个类或另外一个接口的成员,这种接口被称为成员接口或嵌套接口 * 接口可以继承另外一个接口 * 在接口中无法拥有实例变量;接口指定行为,而不是状态; * 如果一个类继承了一个父类且实现了一个接口,而且从接口和父类两者继承了相同的方法,只关心父类的方法,直接忽视接口的默认方法; * JAVA8允许在接口中定义静态方法;但是这种做法违背将接口作为抽象规范的初衷; * 接口里定义的内部类、内部接口、内部枚举默认都采用public static修饰符; #### 嵌套接口 * 可以将接口声明为某个类或另一个接口的成员,这种接口被称为成员接口或嵌套接口 #### 接口的多级继承 如果接口A和B同时提供了eat\(\)默认方法,而类C同时实现了A和B两个接口: * 如果类C重写了eat\(\)方法,则使用类C的eat\(\)方法; * 如果类C没有重写eat\(\)方法,则会发生错误; * 如果B继承了A接口,并都提供了默认的eat\(\)方法,则B的eat方法具有更高的优先级 * 显示引用被继承接口的默认方法: ``` InterfaceName.super.methodName() ``` #### 接口多级继承规则 如果MyClass类实现了Alpha和Beta接口,且两个接口都提供了名为reset\(\)的方法的默认实现:![](../assets/interface.png) #### 接口的静态方法 JDK8支持在接口中定义一个或多个静态方法,接口定义的静态方法可以独立于任何对象调用,与类的静态方法调用一样\(JDK8新特性\) 调用:interfaceName.staticMethodName ``` public interface InterfaceDemo { public static void say() { System.err.println("hello,world"); } } ``` ### 接口默认方法 * 默认方法的重要用法是"接口演化" * 接口的默认方法实现\(JDK8新特性\) ``` interface Person { void say(); default String eat() { return "eat"; } } ``` * 默认方法的一个重要用途是接口演化\(如果在Collection接口中添加一个stream方法,如果接口没有提供默认方法实现,现有实现类均会报错\);给接口添加一个非默认方法会导致源代码不兼容; #### 常用接口 * Comparable * Comparator * Runnable * Callable定义返回类型为T的接口