0Pricing
Java Academy · 课时

实践接口

将接口用作类型,将接口传递给方法,并轻松替换不同实现。练习用于编写灵活代码的小型模式。

实践接口 是 CoddyKit 上的免费 Java Academy 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 3 节课。

概览

实际使用接口:将能力视为类型,让调用方独立于具体类。您可以将接口传给方法,将其存储在列表中,并在需要时替换为其他实现。

将接口作为参数

如果方法将接口类型作为参数,代码就会更灵活:

  • 调用方代码保持不变。
  • 不同的类可以实现同一契约并被使用。
  • 在测试中,您可以接入伪实现或存根并快速试验。

代码:Printable 能力

方法使用的不是具体类,而是 Printable 契约;即使实现发生变化,调用方代码也能保持不变。

public class Main {
  // 1) Define a tiny capability
  static interface Printable { void print(); }

  // 2) Two implementations
  static class TextDoc implements Printable {
    public void print() { System.out.println("[TextDoc] Printing text pages"); }
  }
  static class Photo implements Printable {
    public void print() { System.out.println("[Photo] Printing a photo"); }
  }

  // 3) A method that depends on capability, not class
  static void runJob(Printable p) {
    p.print(); // caller does not care which class it is
  }

  public static void main(String[] args) {
    runJob(new TextDoc());
    runJob(new Photo());
  }
}

将接口作为返回类型

有时,工厂方法会返回一个接口。调用方只能看到可用的能力,不需要知道实际的类。这样可以减少依赖并提高模块化程度。

代码:使用 Formatter 的策略

同一个方法可以与不同的 Formatter 实现一起使用。这样无需修改类,就能改变行为。

public class Main {
  // Strategy: different ways to format text
  static interface Formatter { String format(String s); }

  static class UpperFormatter implements Formatter {
    public String format(String s) { return s.toUpperCase(); }
  }
  static class LowerFormatter implements Formatter {
    public String format(String s) { return s.toLowerCase(); }
  }

  // Uses any Formatter
  static String show(String title, Formatter f) {
    return title + " -> " + f.format(title);
  }

  public static void main(String[] args) {
    System.out.println(show("Hello", new UpperFormatter()));
    System.out.println(show("Hello", new LowerFormatter()));
  }
}

代码:接口列表

数组/列表可以使用接口类型。循环只调用同一种方法;每个元素执行自己的实现。

public class Main {
  static interface Task { void run(); }

  static class EmailTask implements Task { public void run(){ System.out.println("Send email"); } }
  static class ReportTask implements Task { public void run(){ System.out.println("Generate report"); } }
  static class CleanupTask implements Task { public void run(){ System.out.println("Clean temp files"); } }

  public static void main(String[] args) {
    Task[] queue = { new EmailTask(), new ReportTask(), new CleanupTask() };
    for (int i = 0; i < queue.length; i = i + 1) {
      queue[i].run(); // same call, different behavior
    }
  }
}

接口练习检查

快速检查:为什么“面向接口编程”很有用?

回顾

回顾:使用接口类型作为参数、返回值或集合,可以让代码更灵活。您可以替换实现,并在测试中使用模拟对象快速验证。

常见问题解答

「实践接口」课时是免费的吗?

是的 — 「实践接口」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 3 节课。

「实践接口」这节课中我会学到什么?

将接口用作类型,将接口传递给方法,并轻松替换不同实现。练习用于编写灵活代码的小型模式。 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Java Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。

「实践接口」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Java Academy 课中编写并运行代码吗?

能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 实践接口
  2. 泛型基础(T、类型推断)
  3. 泛型方法与泛型类
← 返回 Java Academy