接口 interface

作者: 想象之中丶意料之外 | 来源:发表于2021-05-07 10:08 被阅读0次

接口定义:

  • 接口就是多个类的公共规范
  • 接口是一种引用数据类型,其最终的内容就是类中定义的抽象方法

格式

public interface 接口名称{
    // 接口内容
}

注意事项

  • 接口当中的抽象法必须是两个固定的关键字:public abstract
  • 两个固定的关键字【public abstract】可以选择性省略
  • 方法的三要素【方法名、参数列表、返回值】可以根据业务随意定义
public interface DemoInterface {
    // 这个是 抽象方法
    public abstract void f1();
    
    // 这个也是抽象方法
    public String f2();

    // 这个也是抽象方法
    abstract String f3(int i);

    // 这个也是抽象方法
    void f4(int i, char[] chars);
}

接口使用

  • 接口不能直接使用,必须要有一个“实现类”来“实现”该接口
  • 接口的实现类必须覆盖重写(实现)接口中所有的抽象方法
  • 创建实现类对象【DemoInterfaceImpl demoInterfaceImpl = new DemoInterfaceImpl()】调用实现类中的实现方法进行使用
  • 注意事项:同抽象类一样:如果实现类中没有覆盖重写(实现)接口中的所有抽象方法,那么该实现类自己就必须是一个抽象类
// 格式
public class DemoInterfaceImpl implements DemoInterface {
      // 实现接口中的所有抽象方法
      @Override
      public void f1() {
            // xxxx
      }
      
      ...
      
      @Override
      public void f4(int i, char[] chars)  {
          // xxx
      }
}

备注

  • 类的关键字class 换成 interface后,编译生成的字节码文件仍然是:从 .java 到 .class 文件

interface类中可以包含的内容有

  • java 7【常亮、抽象方法】
  • java8【新增:默认方法、静态方法】
  • java9【新增:私有方法】

Java 8 中接口【默认方法、静态方法】

1、默认方法
  • 格式:public default 返回值类型 方法名称(参数列表) { //方法体 }
  • 备注:默认方法可以解决接口升级时,带来的问题【一开始实现类已经全部实现了接口的抽象方法,但是由于接口升级需要,新增了一个方法,但是有不想影响到实现类,此时接口新增的方法,可以不用定义为抽象方法,而是定义为一个默认方,来处理对应的业务逻辑,这样就不会影响到实现类】
  • 接口默认方法【public default void f1(){...}】是会被实现类自动继承下来。所以接口的默认方法可以通过实现类来直接调用
  • 接口默认方法也可以被实现类覆盖重写(重新实现)
2、静态方法
  • 格式:public static 返回值类型 方法名称(参数列表){ // 方法列表 }
  • 备注:静态方法使用时,是直接通过【静态类.方法名】使用,不能通过实现类调用静态方法使用。【实现类Impl.方法名】。因为:一个接口可以有多个实现类。这样可能会产生冲突

Java 9 中接口【私有方法】

  • 当接口中,【默认方法/静态方法】出现重复代码,需要抽取提炼重复代码时,【要求:该提炼重复代码的公共方法,是不允许实现类使用的】此时就可以通过私有方法来解决
  • 格式:
    1、privat static 返回值类型 方法名称(参数列表) { // 方法体 }【静态私有方法,解决静态方法的代码提炼】
    2、public 返回值类型 方法名称(参数列表) { // 方法体 } 【解决默认方法的代码提炼】

接口常亮

  • 格式:public static final 数据类型 常亮名称 = 数据值
  • 注:
    1、使用final 关键字修饰,表示值不可再变
    2、接口中常亮,可以省略 public static final 三个关键字
    3、接口中常亮,一定要在定义时进行初始化【因为java中 static final(静态常亮) 一定要在定义时进行初始化】

总结

  1. 成员变量其实是常量
  2. 接口中最重要的就是抽象方法【注意:实现类必须要覆盖重写接口中所有的抽象方法,除非实现类也是抽象类】
  3. Java8开始,接口允许定义默认方法【注意:默认方法也可以被覆盖重写】
  4. Java8开始,接口允许定义静态方法【注意:静态方法不能通过实现类对象调用,只能通过接口类直接调用】
  5. Java9开始,接口允许定义私有方法【注意:私有方法只有接口自己才能调用,不能被实现类或别人使用】
接口多实现类问题:
  1. 接口中,没有静态代码块 或者 构造方法
  2. 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口【implements xxx, yyy】
  3. 如果实现类,实现的多个接口时,接口中存在重复的抽象方法,那么只需要覆盖重写一次就可以
  4. 如果实现类没有覆盖重写所有的接口中的所有抽象方法,那么实现类必须是一个抽象类
  5. 如果实现类,实现的多个接口时,接口中存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写
  6. 如果实现类的父类方法与接口当中的默认方法冲突时,默认优先使用父类的方法
接口多继承
  1. 类与类时单继承的,直接父类只有一个。
  2. 类与接口之间是多实现的,一个类可以实现多个接口
  3. 接口与接口之间是多继承的

注意:
1、多个父接口当中的抽象方法如果重复,没关系【因为没有实现体】
2、多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的重写【不可省略default关键字,因为该类本省也是接口】

相关文章

  • 接口

    interface 接口 implements 类实现接口 public interface 接口名{ 接口的成员...

  • 学习TypeScript 接口

    TypeScript 接口定义 interface interface_name {} 实例 联合类型和接口 接口...

  • java萌新入门之事件监听

    1.接口 1.1 接口的定义 定义接口的关键字:interface 格式: public interface 接口...

  • 2020-07-23(接口)

    1,接口特点 * a:接口用关键字interface表示, interface 接口名 {} * b:类实现接口用...

  • 2020-06-21接口

    接口 接口的特点 接口用关键字interface修饰:public interface 接口名{} 类实现接口用i...

  • java中的接口

    接口的特点: A:接口用关键字interface表示;格式:interface 接口名{}B:类实现接口用imp...

  • Java 接口(interface)

    接口用关键字interface表示格式:interface 接口名 {} 类实现接口用implements表示格式...

  • Java基础-接口

    1.接口的特点: A:接口用关键字interface表示 interface 接口名 {}B:类实现接口用i...

  • 接口(interface)

    建立一个User接口 建立UserImpl类 创建测试类 编译结果如下图

  • 接口(interface)

    接口(interface) 是与类并行的一个概念1.接口可以看做是一个特殊的抽象类。是常量与抽象方法的一个集合,...

网友评论

    本文标题:接口 interface

    本文链接:https://www.haomeiwen.com/subject/ceomtktx.html