实践接口
将接口用作类型,将接口传递给方法,并轻松替换不同实现。练习用于编写灵活代码的小型模式。
实践接口 是 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 反馈 — 无需本地设置。