hyx0411

导航

java接口

前言

在Java面向对象编程体系中,类、抽象类、接口是三大核心支柱。如果说类是对事物的完整描述,抽象类是对事物的半成品描述,那接口就是对行为的纯粹规范。

接口是Java实现多态、解耦、多继承的核心手段,也是面试高频考点、项目开发的必备知识点。

一、什么是接口?

1. 通俗理解

我们可以把接口理解为一份行为说明书、强制规范、协议。

举个生活化的例子:
生活中的USB接口,统一规定了数据传输、充电的标准。不管是手机、耳机、充电宝,只要设备遵循USB接口规范,就能接入USB端口使用。设备内部怎么实现充电、传输数据,端口并不关心。

映射到Java中:
接口只定义方法的声明(有什么功能),不定义方法的具体实现(功能怎么完成);所有实现该接口的类,必须遵守接口的规范,重写接口中所有抽象方法。

2. 官方定义

接口(interface)是Java中一种特殊的引用数据类型,本质是行为的集合。接口不能实例化对象,仅用于被类实现、被子接口继承。

二、接口基础语法

1. 定义接口

使用关键字 interface 定义接口,语法格式:

// 定义接口
public interface 接口名 {
    // 常量(默认修饰符:public static final)
    // 抽象方法(jdk1.8之前,默认修饰符:public abstract)
    // 默认方法、静态方法(JDK1.8新增)
    // 私有方法(JDK1.9新增)
}

2. 类实现接口

类通过 implements 关键字实现接口,语法格式:

public class 类名 implements 接口名1,接口名2...{
    // 重写接口中所有抽象方法
}

3. 子接口继承接口

接口支持多继承,使用 extends 关键字:

public interface 子接口名 extends 父接口1,父接口2{

}

三、接口内部成员

1. JDK 1.7及以前

接口中只能存在两种成员:

  1. 全局常量:所有变量默认被 public static final 修饰,必须初始化,不能被修改;
  2. 抽象方法:所有方法默认被 public abstract 修饰,无方法体,必须由实现类重写。

示例代码:

public interface Animal {
    // 全局常量,简写,完整写法:public static final String TYPE = "生物";
    String TYPE = "生物";

    // 抽象方法,简写,完整写法:public abstract void eat();
    void eat();
    void sleep();
}

2. JDK 1.8 新增

为了解决接口升级时,所有实现类都需要重写新增方法的痛点,1.8新增两种带方法体的方法:

  1. 默认方法:被default修饰,有方法体,实现类可直接使用,也可选择性重写;
  2. 静态方法:被static修饰,有方法体,只能通过接口名直接调用,实现类无法继承。
public interface Animal {
    // 默认方法
    default void breath(){
        System.out.println("所有动物都需要呼吸");
    }
    // 静态方法
    static void showInfo(){
        System.out.println("这是动物通用接口");
    }
}

3. JDK 1.9 新增

新增私有方法:被private修饰,仅供接口内部的默认方法、静态方法调用,实现类无法访问,用于抽取接口内重复代码。

四、接口核心特点

  1. 无法实例化:接口不是完整的类,不能通过new创建对象;

  2. 访问权限:接口顶层成员只能使用public权限;

  3. 多实现:一个类可以同时实现多个接口,弥补Java类单继承的缺陷;

  4. 多继承:一个子接口可以同时继承多个父接口;

  5. 强制重写:普通类实现接口,必须重写接口中全部抽象方法;

  6. 权限简化:接口内常量、抽象方法修饰符自动补全,无需手动书写。

五、实战案例

我们以动物案例,演示接口的定义、实现、多态用法

步骤1:定义通用接口

// 动物行为接口
public interface Animal {
    // 抽象方法:吃东西
    void eat();
    // 抽象方法:发出叫声
    void shout();
}

步骤2:创建实现类

// 狗类,实现Animal接口
public class Dog implements Animal{
    @Override
    public void eat() {
        System.out.println("小狗吃骨头");
    }

    @Override
    public void shout() {
        System.out.println("小狗汪汪叫");
    }
}

// 猫类,实现Animal接口
public class Cat implements Animal{
    @Override
    public void eat() {
        System.out.println("小猫吃小鱼干");
    }

    @Override
    public void shout() {
        System.out.println("小猫喵喵叫");
    }
}

步骤3:测试类(多态用法)

public class Test {
    public static void main(String[] args) {
        // 接口引用指向实现类对象:接口多态
        Animal a1 = new Dog();
        Animal a2 = new Cat();

        a1.eat();
        a1.shout();
        a2.eat();
        a2.shout();
    }
}

运行结果:

小狗吃骨头
小狗汪汪叫
小猫吃小鱼干
小猫喵喵叫

六、接口 VS 抽象类

对比维度 抽象类(abstract class) 接口(interface)
关键字 class interface
继承/实现 单继承:一个类只能继承一个抽象类 多实现:一个类可实现多个接口
成员变量 可以定义普通变量、常量 只能定义全局常量(static final)
成员方法 普通方法、抽象方法 抽象方法、默认/静态/私有方法
构造方法 有构造方法,用于子类初始化 无构造方法,不能实例化
设计理念 是什么:描述事物本身属性与行为 能做什么:描述事物拓展行为

简单使用原则

  1. 描述事物固有属性、通用行为 → 用抽象类;
  2. 描述拓展功能、通用规范(如:奔跑、飞翔) → 用接口;

七、总结

  1. 接口的核心定位:行为规范,只定标准,不做实现;

  2. 核心作用:弥补单继承缺陷、降低代码耦合度、统一项目开发规范;

  3. 开发口诀:固有行为写抽象类,拓展行为写接口。

posted on 2026-06-13 23:18  芸歆  阅读(0)  评论(0)    收藏  举报