版本:基于 Java 17 & Java 21 LTS
在本篇中,我们将探讨 Java OOP 的高级特性:继承、多态、接口、内部类以及现代 Java 17+ 引入的密封类 (Sealed Classes)。
1. 继承 (Inheritance)
继承允许一个类继承另一个类的属性和方法,提高代码重用性。
public class Animal {
void sound() {
System.out.println("发出声音...");
}
}
// 继承:Cat 是 Animal 的一种 (is-a 关系)
public class Cat extends Animal {
@Override // 强烈建议写上,让编译器帮你检查拼写
void sound() {
System.out.println("喵喵喵~");
}
}2. 多态 (Polymorphism)
多态是 OOP 的灵魂:父类引用指向子类对象。
Animal myAnimal = new Cat(); // 向上转型
myAnimal.sound(); // 虽然是用 Animal 声明,但实际调用的是 Cat 的方法现代模式匹配 (Pattern Matching for instanceof)
Java 16+ 引入了更优雅的方式来判断并转换类型:
if (myAnimal instanceof Cat c) {
// 自动将 myAnimal 强转为 c,不再需要 (Cat)myAnimal 的旧式写法
c.sound();
}3. 接口 (Interface)
接口定义了“契约”,即“能做什么”,而不是“怎么做”。现代 Java 接口非常强大。
3.1 默认方法与静态方法 (Java 8+)
public interface Playable {
void play(); // 抽象方法
// 默认方法:子类可以直接使用或重写
default void stop() {
System.out.println("停止播放");
}
// 静态方法:只能通过接口名调用
static void info() {
System.out.println("Playable 接口 v1.0");
}
}4. 内部类 (Inner Classes)
Java 允许在一个类内部定义另一个类。
成员内部类:依赖于外部类对象存在。
静态内部类:不依赖外部类对象,通常作为工具类。
匿名内部类:没有名字的类,通常用于快速实现接口。
// 匿名内部类实现接口 (传统写法)
Playable p = new Playable() {
@Override
public void play() {
System.out.println("正在玩...");
}
};5. 现代 Java 特性:密封类 (Sealed Classes)
Java 17 引入了 sealed 关键字。在旧版中,父类无法控制谁能继承它。密封类允许你精确控制继承体系。
// 定义:只有 Circle 和 Rectangle 可以继承 Shape
public sealed class Shape permits Circle, Rectangle {}
// 子类必须标记为 final, sealed, 或 non-sealed
public final class Circle extends Shape {}
public final class Rectangle extends Shape {}本章小结
第五篇我们深度学习了:
继承体系及方法重写 (
@Override)。多态的威力及其在 Java 16+ 中的模式匹配。
接口的演进:抽象方法、默认方法与静态方法。
内部类:各类内部类的定义与应用场景。
密封类 (Sealed Classes):Java 17 核心特性。
下一篇预告:常用 API 篇 (String, DateTime, Optional, BigDecimal)