public interface Demo{//接口定义 // }
编译生成的字节码文件仍然是.class
接口不能有静态方法块,没有构造方法。
一个类只能有一个直接父类,但是可以同时实现多个接口。
如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需重写一次即可。
如果实现类没有重写所有接口中的所有抽象方法,那么实现类就必须是一个抽象类。
如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
一个类如果直接父类当中的方法和接口当中的默认方法产生了冲突,优先使用父类当中的方法。
Java7: 1. 常量 2. 抽象方法
Java8: 3. 默认方法 4. 静态方法
Java9: 5.私有方法
public abstract void demo();//接口抽象方法的定义,两个修饰符是固定的,不能替换为其他修饰符,但是可以选择性的省略
接口不能直接使用,必须有一个“实现类”来实现接口;
public class DemoImpl implements Demo{ }
接口的实现类必须重写接口中所有的抽象方法,除非实现类是抽象类;
创建类对象,然后使用。
public default void demo(){//默认方法定义方式 }
默认方法可以解决接口升级的问题。
接口的默认方法可以通过接口实现类对象直接调用,也可以被接口实现类进行重写。
public static void demo(){//静态方法定义方式 }
private void demo(){//解决多个默认方法之间重复代码问题 }
private static void demo(){//解决多个静态方法之间重复代码问题 }
接口中也可以定义成员变量,但是必须使用public static final三个关键字修饰。关键字可以省略,常量必须赋值。
public static final int NUM_OF_DEMO = 0;
多个父接口当中的抽象方法如果重复,没有关系;多个父接口中的默认方法如果重复,那么子接口必须进行默认方法的重写,且必须带着default关键字。