Java接口

在 Java 中,可以通过两种形式来达到抽象的目的,一种是抽象类,另外一种就是接口。

《《《《一个类只能继承一个抽象类,但却可以实现多个接口。》》》》》

接口是通过 interface 关键字定义的,它可以包含一些常量和方法。

public interface Electronic {
    // 常量
    String LED = "LED";

    // 抽象方法
    int getElectricityUse();

    // 静态方法
    static boolean isEnergyEfficient(String electtronicType) {
        return electtronicType.equals(LED);
    }

    // 默认方法
    default void printDescription() {
        System.out.println("电子");
    }
}

1)接口中定义的变量会在编译的时候自动加上 public static final 修饰符,也就是说 LED 变量其实是一个常量。【换句话说,接口可以用来作为常量类使用,还能省略掉 public static final

2)没有使用 privatedefault 或者 static 关键字修饰的方法是隐式抽象的,在编译的时候会自动加上 public abstract 修饰符。也就是说 getElectricityUse() 其实是一个抽象方法,没有方法体——这是定义接口的本意。

3)静态方法无法由(实现了该接口的)类的对象调用,它只能通过接口的名字来调用,比如说 Electronic.isEnergyEfficient("LED")

02、定义接口的注意事项

  • 接口中允许定义变量

  • 接口中允许定义抽象方法

  • 接口中允许定义静态方法(Java 8 之后)

  • 接口中允许定义默认方法(Java 8 之后)

1)接口不允许直接实例化。

2)接口可以是空的,既不定义变量,也不定义方法。

3)不要在定义接口的时候使用 final 关键字,否则会报编译错误,因为接口就是为了让子类实现的,而 final 阻止了这种行为。

4)接口的抽象方法不能是 private、protected 或者 final。

5)接口的变量是隐式 public static final,所以其值无法改变。

03、接口可以做什么

1)使某些实现类具有我们想要的功能

2)Java 原则上只支持单一继承,但通过接口可以实现多重继承的目的。

3)实现多态。===【就是同一个事件发生在不同的对象上会产生不同的结果,】

多态的存在 3 个前提:

1、要有继承关系,Circle 和 Square 都实现了 Shape 接口
2、子类要重写父类的方法,Circle 和 Square 都重写了 name() 方法
3、父类引用指向子类对象,circleShape 和 squareShape 的类型都为 Shape,但前者指向的是 Circle 对象,后者指向的是 Square 对象。

04、接口与抽象类的区别

1)语法层面上

  • 接口中不能有 public 和 protected 修饰的方法,抽象类中可以有。

  • 接口中的变量只能是隐式的常量,抽象类中可以有任意类型的变量。

  • 一个类只能继承一个抽象类,但却可以实现多个接口。

原文地址:https://www.cnblogs.com/KL2016/p/14580662.html