Java接口的定义和使用(非常详细)
Java 中的接口是一种特殊的抽象类型,它使用关键字 interface 来定义。接口中可以包含抽象方法、常量(用 public static final 修饰的变量),以及默认方法和静态方法(从 Java 8 开始支持)。
接口的语法结构如下:
接口具有以下几个特点:
Java 程序中,接口有以下几个作用:
【实例】创建接口 InterfaceDemo,代码如下:
【实例】创建接口 InterfaceDemo 和 InterfaceDemo02,创建类 InterfaceDemoTest,实现类实现接口的功能,代码如下:
【实例】创建接口 InterfaceDemo,InterfaceDemo02 和 InterfaceDemo03,实现用接口继承接口的功能,代码如下:
我们可以看出,接口继承可以是单继承,也可以是多继承。但是,类只能是单继承,不能是多继承。
接口的语法结构如下:
访问修饰符 interface 接口名称 { // 抽象方法 }
接口具有以下几个特点:
- 高度抽象:接口只定义行为规范,不包含具体的实现;
- 多实现性:一个类可以实现多个接口,这为代码的灵活性和可扩展性提供了很大的空间;
- 常量定义:在接口中可以定义常量,这些常量在实现接口的类中可以直接使用;
- 默认方法和静态方法:从 Java 8 开始,在接口中可以有默认方法(有方法体,使用关键字 default 修饰)和静态方法,这使接口的功能更加强大。
Java 程序中,接口有以下几个作用:
- 定义标准:接口为不同的类提供统一的行为规范,使不同的类可以以相同的方式进行交互;
- 解耦:接口降低了类之间的耦合度,使代码更易于维护和扩展;
- 支持多态:实现接口的不同类的对象可以被视为接口类型的对象,从而实现多态性。
接口的实现方式
1) 接口的创建
接口使用关键字 interface 来定义。【实例】创建接口 InterfaceDemo,代码如下:
public interface InterfaceDemo { // 静态常量 int A = 10; // 抽象方法 void demo(); // 可省略 public abstract }在上述代码中,关键字 interface 定义接口,在接口中编写抽象方法和静态常量,抽象方法 demo 可以不写关键字 abstract,在静态常量 A 中可以不写关键字 final static,直接定义就是常量。从 Java 8 以后的版本可以写默认方法和静态方法。
2) 类实现接口
使用关键字 implements,一个类可以实现一个或多个接口,并实现接口中所有的抽象方法。【实例】创建接口 InterfaceDemo 和 InterfaceDemo02,创建类 InterfaceDemoTest,实现类实现接口的功能,代码如下:
public class InterfaceDemoTest implements InterfaceDemo, InterfaceDemo02 { // 重写 InterfaceDemo 接口的抽象方法 @Override public void demo() { System.out.println("InterfaceDemo"); } // 重写 InterfaceDemo02 接口的抽象方法 @Override public void demo02() { System.out.println("InterfaceDemo02"); } }在上述代码中,我们可以看出,实现接口使用的关键字是 implements。一个类可以实现一个或多个接口,并且将接口中的抽象方法全部重写。
3) 接口继承接口
一个接口可以使用关键字 extends 继承其他接口,继承后的接口包含父接口中的所有方法。【实例】创建接口 InterfaceDemo,InterfaceDemo02 和 InterfaceDemo03,实现用接口继承接口的功能,代码如下:
public interface InterfaceDemo03 extends InterfaceDemo, InterfaceDemo02 { // 继承 InterfaceDemo 接口的抽象方法 void demo(); // 继承 InterfaceDemo02 接口的抽象方法 void demo02(); }在上述代码中,InterfaceDemo03 作为子接口,继承了接口 InterfaceDemo 和 InterfaceDemo02,接口 InterfaceDemo03 可以继承接口 InterfaceDemo 和 InterfaceDemo02 的全部方法。
我们可以看出,接口继承可以是单继承,也可以是多继承。但是,类只能是单继承,不能是多继承。
抽象类与接口的区别
抽象类与接口有以下区别:- 抽象类可以有非抽象方法和构造方法,接口只能有抽象方法和常量(Java 8 后的版本有默认方法和静态方法);
- 抽象类只能单继承,而接口可以多继承;
- 抽象类中的方法可以有不同的访问修饰符,而接口中的方法默认都是 public 的。