成员变量

接口当中可以定义成员变量 但是必须使用public static final三个关键字修饰
从效果上看 这其实就是接口的常量
格式:
public static final 数据类型 常量名称 =数据值

一旦使用final关键字进行修饰 说明不可变

  • 1,接口当中的常量可以省略public static final 不写也照样是这样
  • 2,接口当中的常量 必须进行赋值 不能不赋值
  • 3,接口中常量的名称使用完全大写的字母 用下换线进行分割(推荐命名规则)
  • 4,直接接口名.调用
public interface MyInterfaceCount {
//这其实就是一个常量 一旦赋值 不可以修改
public static final int NUM_OF_MY_CLASS=10;
}

抽象方法

在任何版本的java中 接口都能定义抽象方法
public abstract 返回值类型(参数列表);

  • 注意事项:
  • 1,接口当中的抽象方法 修饰符必须是两个固定的关键字:public abstract
  • 2,这两个关键字修饰符可以选择性的省略
public interface MyInterfaceAbstract {
//这是一个抽象方法
public abstract void methodAbs1();
//这也是抽象方法
abstract void methodAbs2();
//这也是抽象方法
public void methodAbs3();
//这也是抽象方法
void methodAbs4();
}

默认方法

从java8开始 接口里允许定义默认方法
格式:
public default 返回值类型 方法名称(参数列表){
方法体
}
备注:

  • 1,接口当中的默认方法可以解决接口升级的问题
  • 2,接口中的默认方法可以覆盖重写
public interface MyInterfaceDefault {
//添加默认方法
public default void methodDefault(){
System.out.println("这是新添加的默认方法");
}
}

静态方法

从java8开始 接口当中允许定义静态方法
格式:
public static 返回值类型 方法名称(参数列表){
方法体
}
提示:

  • 1,就是将abstract 或者default换成static即可 带上方法体
  • 2,接口名. 直接调用

私有方法

抽取一个共有方法 用来解决两个默认方法之间重复代码的问题
但是这个共有方法不应该让实现类使用 应该是私有方法
从java9开始 接口当中允许定义私有方法

  • 1,普通私有方法 解决多个默认方法之间重复代码问题
    格式:
    private 返回值类型 方法名称(参数列表){
    方法体
    }
  • 2,静态私有方法 解决多个静态方法之间重发代码问
    格式:
    private static 返回值类型 方法名称(参数列表){
    }
public interface MyInterfacePrivateA {
public default void methodDefault1(){
System.out.println("默认方法1");
methodCommon();
}
public default void methodDefault2(){
System.out.println("默认方法2");
methodCommon();
}
private void methodCommon(){
System.out.println("AAA");
System.out.println("BBB");
System.out.println("CCC");
}
}
public interface MyInterfacePrivateB {
public static void methodStatic1(){
System.out.println("默认方法1");
methodStaticCommon();
}
public static void methodStatic2(){
System.out.println("默认方法2");
methodStaticCommon();
}
private static void methodStaticCommon(){
System.out.println("AAA");
System.out.println("BBB");
System.out.println("CCC");
}
}

注意事项

Java接口(Interface)_默认方法


使用接口的时候 需要注意

  • 1,接口是没有静态代码块或者构造方法的
  • 2,一个类的直接父类是唯一的 但是一个类可以同时实现多个接口
    格式:
    public class MyInterface implements MyInterfaceA,MyInterfaceB{
    //覆盖重写所有抽象方法
    }
  • 3,如果实现类所实现的多个接口当中 存在重复的抽象方法 那么只需要覆盖重写一次即可
  • 4,如果实现类没有覆盖重写所有接口当中的所有接口抽象方法 那么实现类就必须是一个抽象类
  • 5,如果实现类实现的多个接口当中 存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写
  • 6,一个类如果直接父类当中的方法 和接口当中的默认方法产生了冲突 优先用父类当中的方法*/