接口

发布于 2026-07-29 08:42 更新于 2026-07-29 08:42 863 字 5 min read ... 访问量

文章介绍了接口的概念、作用及在面向对象设计中的应用。接口用于制定行为规范,降低类之间的耦合,支持多实现和统一调用,可通过继承和实现实现功能扩展,并结合工厂模式和UML类图进行系统设计。类图中的泛化、实现、依赖和关联关系反映了类与接口之间的结构与交互。

接口(interface)

接口的作用

接口用于描述一组对外公开的行为规范。它主要有以下作用:

  • 制定统一的功能标准。
  • 降低调用方与具体实现类之间的耦合。
  • 允许不同实现类以统一的接口类型传递和使用。

接口的定义

使用 interface 关键字定义接口:

public interface IFirst {
    String NAME = "TOM";

    void firstMethod();

    default void firstMethod2() {
        System.out.println("firstMethod2");
    }

    static void firstMethod3() {
        System.out.println("firstMethod3");
    }
}

接口中的字段默认使用 public static final 修饰,因此本质上都是常量;普通抽象方法默认使用 public abstract 修饰。Java 8 开始,接口还可以定义默认方法和静态方法。

接口不能直接实例化,必须由类实现后再创建实现类对象。

实现接口

类使用 implements 关键字实现接口。一个类可以实现多个接口;非抽象实现类必须重写接口中的全部抽象方法。

public class FirstImpl implements IFirst, ISecond {
    @Override
    public void firstMethod() {
        System.out.println("实现 firstMethod 方法");
    }

    @Override
    public void secondMethod() {
        System.out.println("实现 secondMethod 方法");
    }
}

调用时通常使用接口类型引用实现类对象,从而面向接口编程:

public class Test {
    public static void main(String[] args) {
        IFirst first = new FirstImpl();
        ISecond second = new FirstImpl();

        first.firstMethod();
        second.secondMethod();
    }
}

接口之间的继承

接口可以使用 extends 继承一个或多个接口。

public interface ITest extends IFirst, ISecond {
}
image-001
image-001

使用接口制定标准

例如,要制作一个聚合多个视频平台资源的网站,可以先定义视频资源接口,再让各平台分别提供实现。业务代码只依赖接口,不直接依赖某个平台的具体类。

public interface IVideo {
    void getResource(String name);
}

这样可以在不修改主要业务流程的情况下替换具体实现。

工厂设计模式

工厂模式把创建对象的过程封装到工厂类中。调用方通过工厂获取接口对象,不需要直接使用具体实现类的构造器。

public class VideoFactory {
    public static IVideo getVideoObject() {
        return new AQYVideo();
    }
}
public class Test {
    public static void main(String[] args) {
        IVideo video = VideoFactory.getVideoObject();
        video.getResource("xxx");
    }
}

上面的代码仍由工厂决定创建哪一种实现类,但调用方只依赖 IVideo 接口,耦合度比直接创建具体类更低。

面向对象分析与设计

UML 可以辅助面向对象分析与设计。常见图包括用例图、类图、时序图、状态图和活动图。其中,类图主要描述类、接口以及它们之间的关系。

类图中的常见关系

泛化关系

表示类之间的继承关系,在 Java 中通常使用 extends

实现关系

表示类实现接口,在 Java 中使用 implements

依赖关系

一个对象在某个方法中临时使用另一个对象,通常表现为方法参数、局部变量或方法返回值。例如,司机类的驾驶方法可以接收交通工具接口类型的参数。

关联关系

一个对象长期持有另一个对象,通常表现为成员变量。例如,球员类中定义球队属性属于一对一关联;球队类中保存多个球员属于一对多关联。如果双方都持有对方的引用,则属于双向关联。

喜欢的话,留下你的评论吧~

... 访问量
© 2026 跨越星轨的客 @Hoshiumi
Powered by theme astro-koharu · Inspired by Shoka