欢迎光临
我们一直在努力

Java 接口(Interface)

Java 接口(Interface)

接口的本质: 接口是一种比抽象类更“纯粹”的抽象类型。它就像是一份 “通用契约” 或 “行为标准” ,只规定“能做什么”,而不关心“具体怎么做”。

接口的核心作用
  • 约束与规范:定义一套标准,强制要求实现类必须遵守。
  • 扩展能力:弥补了 Java 类“单继承”的局限,让一个类可以实现多个接口,从而具备多种能力。
  • 解耦:将“使用者”和“实现者”分离。面向接口编程,依赖的是抽象的契约,而不是具体的实现类,这大大提高了代码的灵活性和可维护性。
  • 接口的定义与成员规则
  • 抽象方法:接口中的普通方法默认都是 public abstract 修饰的(即使省略不写,编译器也会自动加上)。(注:从 Java 8 开始,接口中允许定义带有方法体的 default 和 static 方法。)
  • 全局常量:接口中定义的属性(变量)默认都是 public static final 修饰的,即全局静态常量。必须在声明时赋值,且不可修改。
  • 无构造方法:接口不能被实例化(不能 new 接口),因此接口中没有构造方法。
  • 接口的实现(Implements)
  • 多实现机制:一个类可以通过 implements 关键字来实现一个或多个接口(多个接口用逗号隔开)。
  • 强制重写:如果一个普通类实现了接口,就必须重写接口中所有的抽象方法。如果该类没有重写所有抽象方法,则这个类必须被声明为抽象类。
  • 访问权限:接口中的方法默认是 public 的,实现类在重写时,访问权限不能低于接口的权限,所以必须显式声明为 public。
  • 接口与继承的关系
    • 类与类:只能是单继承(extends)。
    • 类与接口:可以多实现(implements)。
    • 接口与接口:接口之间支持多继承(一个接口可以 extends 多个父接口)。
    代码示例:多实现与不可实例化

    接口就像一份“行为说明书”,类实现了接口就必须照着做。同时,接口本身是抽象的,无法直接创建对象。

    // 定义两个接口:代表两种不同的能力
    interface Flyable {
    void fly();
    }
    interface Swimmable {
    void swim();
    }

    // 一个类可以实现多个接口(多实现),同时具备飞行和游泳的能力
    class Duck implements Flyable, Swimmable {
    @Override
    public void fly() {
    System.out.println("鸭子在天上飞");
    }
    @Override
    public void swim() {
    System.out.println("鸭子在水里游");
    }
    }

    public class Test {
    public static void main(String[] args) {
    // 接口不能被实例化!以下代码会报错:
    // Flyable f = new Flyable(); 编译错误

    // 正确的做法是:创建实现类的对象
    Duck duck = new Duck();
    duck.fly();
    duck.swim();
    }
    }

    生活案例:USB 接口

    接口在现实生活中的完美体现就是电脑的 USB 接口。

    电脑主板(系统)定义好了 USB 接口的规范(能传输数据、能供电),它不需要知道具体插上来的是什么设备。

    • 鼠标实现了 USB 接口,插上就能控制光标。
    • 键盘实现了 USB 接口,插上就能输入文字。
    • U盘实现了 USB 接口,插上就能读写文件。

    不管是鼠标、键盘还是U盘,只要它们符合 USB 接口的规范(实现了接口),电脑就能识别并使用它们。这就是接口“约束”与“多态”的完美体现,也极大地降低了设备与电脑之间的耦合度。

    赞(0)
    未经允许不得转载:171主机测评 » Java 接口(Interface)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址