Java 9中的接口

接口

接口就是一种公共的规范标准
只要符合标准,大家就可以通用
eg:USB接口,只要符合USB接口的规范,各种设备就可以通用。

基本格式

  • 接口就是多个类的公共规范
  • 接口是一种引用数据类型(除了基本数据类型都是引用数据类型),最重要的就是其中的抽象方法。
  • 格式:
    public interface 接口名称{
        //接口内容
    }

备注:换成了关键字interface后,编译生成的字节码文件仍然是class文件。

  • 如果是java 7,那么接口中可以包含的内容有:

    1. 常量
    2. 抽象方法
  • 如果是java 8,还额外包含有:
    3. 默认方法
    4. 静态方法

  • 如果是java 9,还可以额外包含有:
    5. 私有方法

  • 在任何版本的Java中,接口都能定义抽象方法。

    • 格式:public abstract 返回值类型 方法名称(参数列表);
    • 注意事项
    1. 接口中的抽象方法,修饰符必须是两个固定的关键字:public和abstract
    2. 两个固定关键字可以选择性的省略。
    3. 方法的三要素,可以随意定义。
    public interface MyInterfaceAbstract{
    
        public abstract void method1();
        
        abstract void method1();
        
        public  void method1();
        
        void method1();
        //都是正确的;
    }

接口使用步骤

  1. 接口不能直接使用,必须有一个“实现类”来实现接口;
    格式:
        public class 实现类名称 implements 接口名称      {
        //。。。
      }
  1. 接口的实现必须覆盖重写(实现)接口中所有的抽象方法。
  2. 创建实现类的对象,进行使用。

eg:

public class MyInterfaceAbstract implements MyInterfaceAbstract {
    @Override
    public void method(){
        //...;
    }
}

注:如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类就必须是抽象类。

接口默认方法

//Java 8开始,接口允许定义默认方法;

  • 格式
    public default 返回值类型 方法名(参数列表){
    //…;
    }
    注:
  1. 接口中的默认方法,可以解决接口中的升级问题。即在接口中也可添加方法体。
  2. 接口的默认方法,可以通过接口实现类对象直接调用。
  3. 接口的默认方法,也可以被覆盖重写。

接口的静态方法

//Java 8开始,接口中允许定义静态方法;

  • 格式
    public static 返回值类型 方法名称(参数列表){
    方法体
    }
  • 提示
    就是将abstract或default换成static,带上方法体即可。

使用

  1. 不能通过接口实现类的对象来调用接口当中的静态方法
    错误:
MyInterfaceStaticIml impl = new MyInterfaceStaticImpl();
impl.methodStatic();
  1. 应通过接口名称,直接调用其中的静态方法
    正确:
    MyInterfaceStatic.methodStatic();

接口的私有方法定义

//Java 9开始支持

  • 我们需要抽取一个共有方法,来解决两个默认方法之间重复代码的问题。但是共有方法不应让实现类来使用,故应该私有化。
  1. 普通私有方法:解决多个默认方法之间重复代码的问题。
    格式:
private 返回值类型 方法名称(参数列表){
    //...;
}
  1. 静态私有方法:解决多个静态方法之间重复代码的问题。
private static 返回值类型 方法名称(参数列表){
    //...;
}

接口的“常量”定义和使用

  • 接口中也可以定义“成员变量”,但是必须用public static final三个关键字进行修饰。
  • 从效果上看,这就是接口的“常量”。
  • 格式:
    • public static final 数据类型 常量名称 = 数值;
  • 一旦使用final关键字修饰,说明该值不可更改、
  • 注意:
  1. 接口当中的常量,可以省略public static final,注意,不写也是这样的
  2. 接口当中的常量,必须进行赋值,不能不赋值
  3. 接口当中的常量名称,使用完全大写的字母,用下划线进行分隔

继承父类并实现多个接口

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

接口之间的多继承

  1. 类与类之间是单继承的。直接父类只有一个
  2. 类与接口之间是多实现的,一个类可以实现多个接口。
  3. 接口与接口之间是多继承的。

注:

  • 多个父接口中的抽象方法重复,没关系
  • 多个父接口中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,且必须带着dafault关键字

猜你喜欢

转载自blog.csdn.net/weixin_41121063/article/details/87913261