Language 中级

直接在接口中添加方法实现,支持行为的多重继承。

✕ Java 7
// Need abstract class to share behavior
public abstract class AbstractLogger {
    public void log(String msg) {
        System.out.println(
            timestamp() + ": " + msg);
    }
    abstract String timestamp();
}

// Single inheritance only
public class FileLogger
    extends AbstractLogger { ... }
✓ Java 8+
public interface Logger {
    default void log(String msg) {
        IO.println(
            timestamp() + ": " + msg);
    }
    String timestamp();
}

// Multiple interfaces allowed
public class FileLogger
    implements Logger, Closeable { ... }
发现此代码有问题? 告诉我们。
🔀

多重继承

类可以实现多个带有默认方法的接口,不像单继承的抽象类那样受限。

📦

API 演进

向接口添加新方法而不破坏现有实现。

🧩

可组合行为

自由混合和匹配来自多个接口的功能。

旧方式
用抽象类共享行为
现代方式
接口上的默认方法
自 JDK
8
难度
中级
接口默认方法
可用

自 JDK 8 起可用(2014 年 3 月)。

Java 8 之前,跨不相关类共享行为需要抽象基类,这限制了灵活性。默认方法允许接口在不破坏现有实现的情况下进行演进。

分享 𝕏 🦋 in