在 Java 中,接口(Interface)是一种特殊的抽象类,用于描述一组方法的集合而不提供实现。它定义了一套标准,以规定类应该如何去实现这些方法。任何类只要实现了接口中所定义的所有方法,就可以称为实现了该接口。
Java 接口的声明方式类似于一个类,使用 interface
关键字来定义。接口中可以包含常量和抽象方法,但不能包含实例变量和构造方法。其声明格式如下:
[访问修饰符] interface 接口名称 [extends 父接口1, 父接口2, ...] {
[常量声明]
[抽象方法声明]
}
实现接口的类必须实现接口中所有的抽象方法。Java 中的一个类可以同时实现多个接口,这可以通过用逗号分隔多个接口来实现。实现接口的类可以正常地继承其他类,并可以在类中添加自己的成员变量和方法。
在 Java 中,接口包括很多类型,例如 JDBC 数据库访问接口、Servlet Web 应用接口、Swing 图形界面接口等。利用接口可以实现代码的复用和扩展性的提高,因此在 Java 代码设计和开发中常常用到。
在 Java 中,实现接口的格式为:
class 类名 [extends 父类名] implements 接口名1 [, 接口名2, ...] {
// 实现接口中的所有抽象方法
}
其中 class
关键字表示定义一个类,extends
关键字表示继承一个父类,implements
关键字表示实现一个或多个接口。在一个类中实现一个接口时,必须实现该接口中定义的所有抽象方法,否则该类必须也是一个抽象类。
若一个类同时实现多个接口,它们之间使用逗号 ,
分隔。同时,可以先继承一个父类,再实现多个接口。需要注意的是,Java 不支持多重继承,但可以通过实现多个接口来达到类似的效果。
在 Java 中,接口(Interface)是一种特殊的抽象类,用于描述一组方法的集合而不提供实现。可以从以下几个方面了解到接口的成员特点:
- 接口中的成员都是公共的
- 接口中的变量默认为
public static final
,即为常量,在接口中定义的变量必须进行初始化,而且一旦被初始化后不允许再次修改 - 接口中的方法默认为
public abstract
,即为抽象方法,接口中的方法不能有方法体(JKD8以后可以了) - 接口中不能包含普通方法、构造器或静态代码块等成员
- 一个类可以实现多个接口,实现接口的类必须实现接口中所有的抽象方法
利用接口可以实现代码的复用和扩展性的提高,因此在 Java 代码设计和开发中常常用到。
补充:
在JDK8以后,
允许定义默认方法,需要用default关键字修饰。重写要去掉default关键字。
public default void 方法名(){}
默认方法是指在接口中定义的一个带有实现的非抽象方法,其关键字为default。当一个类实现了这个接口却没有提供此方法,则会使用默认方法。同时,如果该实现类需要对默认方法进行重写,可以直接覆盖该方法,否则可以直接继承默认方法的实现。
静态方法是指在接口中定义的一个带有实现的静态方法,其关键字为static。可以直接通过接口名调用静态方法,不需要通过类创建对象来调用。静态方法只能通过接口来调用,不能被实现该接口的类继承或覆盖。
这两种方法都是在 JDK 8 中引入的新特性,使得接口具有更多的灵活性和可扩展性,同时保证了面向对象编程的核心原则:封装、继承和多态。
在JDK9以后,
在 JDK9 以后的版本中,Java 接口又新增了私有方法。私有方法是只能在接口内部被使用的方法,不能被实现该接口的类或其他地方访问。私有方法可以提取共用的代码逻辑,避免重复的代码。另外,在接口方法之间调用私有方法也可以提高代码的可读性和可维护性。
私有方法有两种类型:实例私有方法和静态私有方法。实例私有方法是指只能被实现该接口的类的实例调用的私有方法,而静态私有方法则是只能被实现该接口的类调用的私有方法,不能通过类名来调用。
这个特性在 JDK9 中首次引入,为接口提供了更多的编程灵活性和函数式编程的特性。
例如:
private void 私有方法名(){
}
private static void 私有方法名(){
}
其中普通私有方法为默认方法服务,静态私有方法为静态方法服务。
适配器 设计模式:
当一个实现接口的类只需要实现接口中一部分方法时,用一个中间类对接口中的所有方法空实现,然后由继承类重写即可。
一般中间类名字为XXXAdapter。