接口基础知识

一、接口的概念

接口使用interface关键字定义,它是一种行为规范 / 能力标准,主要用来规定 "某类事物必须具备哪些行为"。

复制代码
public interface 接口名 {
}

接口可以理解为:

  • 制定规则;
  • 定义能力;
  • 不关心具体实现,只关心 "能不能做"。

二、接口的基本定义

复制代码
public interface Flyable {
    // 抽象方法:规定"能飞"
    void fly();
}

在 Java 8 以后,接口中可以包含:

  1. 抽象方法;
  2. 默认方法 default;
  3. 静态方法 static;
  4. 私有方法 private。

但初学阶段,先掌握最核心的:抽象方法 + 类实现接口。


三、类实现接口

类通过implements关键字实现接口,并必须实现接口中的所有抽象方法。

复制代码
public class Bird implements Flyable {
    @Override
    public void fly() {
        System.out.println("鸟扇动翅膀飞翔");
    }
}

完整示例

复制代码
public interface Flyable {
    void fly();
}

public class Bird implements Flyable {
    @Override
    public void fly() {
        System.out.println("鸟扇动翅膀飞翔");
    }
}

public class Plane implements Flyable {
    @Override
    public void fly() {
        System.out.println("飞机依靠发动机飞行");
    }
}

public class TestFly {
    public static void main(String[] args) {
        Flyable f1 = new Bird();
        Flyable f2 = new Plane();

        f1.fly();
        f2.fly();
    }
}

输出:

复制代码
鸟扇动翅膀飞翔
飞机依靠发动机飞行

四、接口的特点

特点 说明
接口不是类 使用interface定义
接口不能创建对象 不能new 接口名()
接口中的方法默认是public abstract 可以不写,但编译后仍然是公共抽象方法
接口中的变量默认是public static final 必须赋值,且不能修改
类实现接口 使用implements
实现类必须实现全部抽象方法 除非是抽象类
一个类可以实现多个接口 implements A, B, C

五、接口中的常量

接口中可以定义常量,格式:

复制代码
public static final 类型 常量名 = 值;

例如:

复制代码
public interface Constants {
    int MAX_COUNT = 100;
    String NAME = "Java";
}

接口里的变量会被自动看作:

复制代码
public static final

所以必须定义时赋值,并且不能修改。


六、接口与抽象类的区别

对比项 抽象类 接口
定义方式 abstract class interface
构造方法 有 没有
成员变量 普通成员变量 主要是常量
方法 抽象方法、普通方法 抽象方法、默认方法、静态方法等
关系 继承关系:extends 实现关系:implements
单继承 / 多实现 类只能单继承 类可以多实现
作用 共性模板 + 部分实现 行为规范、能力标准

七、接口的多实现

一个类可以同时实现多个接口,这是接口最重要的优势之一。

复制代码
public interface Flyable {
    void fly();
}

public interface Swimmable {
    void swim();
}

public class Duck implements Flyable, Swimmable {
    @Override
    public void fly() {
        System.out.println("鸭子飞起来");
    }

    @Override
    public void swim() {
        System.out.println("鸭子游泳");
    }
}

public class TestDuck {
    public static void main(String[] args) {
        Duck duck = new Duck();
        duck.fly();
        duck.swim();
    }
}

八、接口的继承

接口也可以继承接口,并且支持多继承。

复制代码
public interface Flyable {
    void fly();
}

public interface Attackable extends Flyable {
    void attack();
}

public class Bird implements Attackable {
    @Override
    public void fly() {
        System.out.println("鸟飞");
    }

    @Override
    public void attack() {
        System.out.println("鸟攻击");
    }
}

九、面向接口编程

面向接口编程的核心思想是:面向接口调用,不关心具体实现。

例如:

复制代码
public interface USB {
    void work();
}

public class Mouse implements USB {
    @Override
    public void work() {
        System.out.println("鼠标工作");
    }
}

public class Keyboard implements USB {
    @Override
    public void work() {
        System.out.println("键盘工作");
    }
}

public class Computer {
    public void useUSB(USB usb) {
        usb.work();
    }
}

public class TestComputer {
    public static void main(String[] args) {
        Computer computer = new Computer();

        computer.useUSB(new Mouse());
        computer.useUSB(new Keyboard());
    }
}

这里Computer不关心传入的是鼠标还是键盘,只关心它是否符合USB接口规范。


十、本章小结

  1. 接口 :使用interface定义,是行为规范和能力标准。
  2. 抽象方法:接口中主要定义要实现的行为。
  3. 类实现接口 :使用implements,必须实现全部抽象方法。
  4. 多实现:一个类可以实现多个接口。
  5. 面向接口编程:面向接口调用,降低耦合,提高扩展能力。
相关推荐
system_error_x15 分钟前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
酷炫码神27 分钟前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
驭渊的小故事1 小时前
Spring AI Alibaba 实战:从maven依赖治理到声明式工具调用
java·人工智能·spring
Elastic 中国社区官方博客1 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1881 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn2 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
y1su2 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
传奇开心果编程3 小时前
【Rust入门练中学】第5课:引用与借用
开发语言·rust·引用·编程语言理论·通用编程语言·借用
qetfw3 小时前
Bash 变量:export、位置参数与默认值展开验证
linux·开发语言·chrome·bash
电子云与长程纠缠3 小时前
UE5魂系游戏开发教程05
开发语言·学习·游戏·ui·ue5