概念理解
- 可以理解为,接口就是一份契约,由类实现契约。契约中我编写了某些大的方针与前提,而签了约的类可以具体问题具体分析来实现自己的功能
- 以现实中的生活举例:鸡是动物,苹果是水果,而鸡和苹果都是可以吃的,此时“可以吃的”就是接口
- 这里面的继承关系是:鸡继承于动物,苹果继承于水果
- 这里面的接口实现关系:鸡实现了“可以吃的”接口,苹果实现了“可以吃的”接口;实现了这个接口就代表它是可以吃的
- 首先在Java中,类只能继承一个类(超类),而超类通常是对某批类的抽象,来表示这些类的共性;当有一批类,分别继承了某些超类时,又需要对这批类的某个/多个共同行为进行抽象时,就可以使用接口来实现
简单使用示例
- 通常的做法是,定义一个接口,以及它抽象方法(对某个行为做个约定),再在类中使用关键字implements来声明实现了哪个接口,并根据类的实际情况,重写接口中定义的抽象方法即可
- 实际例子:将“走路”作为一个接口,它的抽象方法就是行走;人和狗都会走路,而人使用两只脚走路,狗使用四只脚走路
// 定义接口“走路”
interface Walk {
void walking();
}
// 定义类——人,并且实现“走路”接口
class People implements Walk {
// 重写接口中的方法
@Override
public void walking() {
System.out.println("人用两只脚走路.");
}
}
// 定义类——狗,并且实现“走路”接口
class Dog implements Walk {
// 重写接口中的方法
@Override
public void walking() {
System.out.println("狗用四只脚走路.");
}
}
- 实际例子:将“走路”作为一个接口,它的抽象方法就是行走;人和狗都会走路,而人使用两只脚走路,狗使用四只脚走路
演变
- Java1.0 :静态常量(static final)、抽象方法(public abstract) 【最初设计接口是抽象类型】
- Java1.1 :静态常量、抽象方法、嵌套类(public static)、嵌套接口(public static)【引入内部类】
- Java 5 :静态常量、抽象方法、嵌套类、嵌套接口、嵌套枚举(public static)、嵌套注释(public static)【引入与类型参数有关的泛型】
- 接口中可定义类型参数T,只能用于抽象方法的参数和返回类型,不能与静态成员一起使用
- Java 8 :静态常量、抽象方法、默认方法(public default)、静态方法(public static)、嵌套类、嵌套接口、嵌套枚举、嵌套注释
- Java 9 :静态常量、抽象方法、默认方法、静态方法、私有方法(private)、嵌套类、嵌套接口、嵌套枚举、嵌套注释