首页 > 编程笔记 > Java笔记

Java接口的基本用法(小白必读)

Java 程序中,一个类只能有一个父类,只支持单重继承,不支持多重继承。但在实际应用中,又经常需要使用多重继承来解决问题。因此,Java 提供了接口,以实现类的多重继承。

在面向对象的程序开发过程中,抽象类与接口是实际项目开发过程中使用最广泛的方法,本节重点讲解接口的基本用法。

什么是接口

Java 程序中的接口是一种抽象类型,用于描述类必须实现的行为。

从面向编程的角度,可以将接口理解为对不同类型的事物的共同的行为特征的抽象。在现实世界中存在一种普遍的现象,从抽象的角度来看,不同类型的事物可能拥有相同的行为特征。

例如,鸟和飞机都有飞行的行为特征,但是由于鸟和飞机是不同类型的事物,因此不应该使用统一的父类来抽象飞行这一共同的行为特征。此时,可以使用一个接口来抽象飞行的行为特征,将接口命名为“可飞行的”。此时可以将某个类和接口组合到一起,表示该类具备该接口抽象的行为特征。

类和接口的组合方式是类“实现”某个接口。例如,一个实现了“可飞行的”接口的类,表示该类具备飞行的行为特征。

在 Java 中,可以使用关键字 interface 来定义一个接口,语法格式如下:
interface 接口名 [extends 接口1,接口2...](
    //接口内的方法,省略关键字abstract
    返回值类型 方法名(参数列表);
}
在 Java 中,与类的成员类型相比,接口中的成员类型显得较为局限。在 Java 8 以前的所有版本中,接口的所有方法都不包含实现(方法体),即都是抽象方法,并且限定都使用 public abstract 来修饰。

从 Java 8 开始,在接口中可以定义使用 default 和 static 修饰的方法,这些方法可以具有方法体。在 Java 9 中,接口中的方法可以使用 private 和 private static 修饰。接口中所有的属性均使用 public static final 修饰,即全局常量。目前,一个 Java 接口中最多可以有 6 种不同的类型。

在 Java 中,使用接口是为了克服单重继承的限制,因为一个类只能有一个父类,而一个类可以实现多个接口。另外,在定义接口时,一个接口可以有多个父接口,它们之间用逗号分隔。

接口的实现

在 Java 中,类可以通过关键字 implements 来指定实现接口的名称,语法格式如下:
[修饰符] 类名 extends '父类' [implements <接口1>,<接口2>,]{
}

接下来通过一个实例介绍接口的实现。
/*
* 定义Flyable接口
*/
interface Flyable {
    // 定义全局常量,默认使用public static final修饰
    String f = "I have wings!";
    // 定义抽象方法takeoff(),默认使用public abstract修饰
    void takeoff();
    // 定义抽象方法fly()
    void fly();
    // 定义Glidable接口
}

// 定义Glidable接口
interface Glidable extends Flyable {
    void glide();
}

// Bird类实现了接口
class Bird implements Glidable {
    // 实现takeoff()方法
    public void takeoff() {
        System.out.println("我要起飞了!");
    }
    public void glide() {
        System.out.println("我在天空中滑翔!");
    }
    // 实现fly()方法
    public void fly() {
        System.out.println("我飞不了那么高!");
    }
    // 定义测试类
    public class Test {
        public static void main(String args[]) {
            // 创建Bird类的实例对象
            Bird b = new Bird();
            // 调用Bird类的takeoff()方法
            b.takeoff();
            // 调用Bird类的glide()方法
            b.glide();
            // 调用Bird类的fly()方法
            b.fly();
        }
    }
}
运行结果为:

我要起飞了!
I have wings!我在天空中滑翔!
I have wings!我飞不了那么高!

上述代码定义了两个接口,其中 Glidable 接口继承 Flyable 接口,因此,Glidable 接口中包含两个抽象方法。Glidable 接口自身定义了一个新的抽象方法。当 Bird 类实现 Glidable 接口时,需要实现两个接口中定义的 3 个方法。由运行结果可知,程序可以针对 Bird 类实例化对象并调用类中的方法。

推荐阅读