好的阿杰 👍
我来给你写一份 Java 抽象类(abstract class)详解,从概念、语法、应用到与接口的对比,帮你彻底掌握。
🟦 Java 抽象类详解
1️⃣ 什么是抽象类?
- 抽象类是一种 不能被实例化 的类,用来作为父类,定义通用的属性和方法。
- 里面可以包含 抽象方法(没有方法体的方法),要求子类必须实现。
👉 通俗理解:
抽象类就像一张 设计图纸,规定了要造什么东西,但具体怎么造要交给子类去完成。
2️⃣ 抽象类的基本语法
abstract class Animal {
// 抽象方法(没有方法体)
public abstract void makeSound();
// 普通方法
public void sleep() {
System.out.println("动物在睡觉");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪!");
}
}
public class TestAbstract {
public static void main(String[] args) {
Animal dog = new Dog(); // 多态
dog.makeSound(); // 汪汪汪!
dog.sleep(); // 动物在睡觉
}
}
3️⃣ 抽象类的特点
- 不能被实例化:
new Animal()
❌ - 可以有构造方法:虽然不能直接实例化,但子类构造时会调用父类构造方法。
- 可以有普通方法和抽象方法。
- 子类必须实现抽象方法,除非子类也是抽象类。
- 可以有成员变量,不像接口只能是常量。
4️⃣ 抽象方法
- 只能存在于抽象类中。
- 没有方法体,用
abstract
修饰。 - 子类必须实现。
abstract class Shape {
public abstract double area(); // 抽象方法
}
5️⃣ 抽象类 vs 接口
对比点 | 抽象类 | 接口 |
---|---|---|
继承/实现 | 只能单继承 | 支持多实现 |
变量 | 可以有各种变量 | 只能 public static final |
方法 | 抽象方法 + 普通方法 | 抽象方法 + 默认方法 + 静态方法 |
构造方法 | ✅ 可以有 | ❌ 没有 |
设计目的 | 代码复用 + 统一规范 | 定义规范/契约 |
👉 一句话记忆:
- 接口更偏向定义规范(“能做什么”)。
- 抽象类更偏向模板(“有一些默认实现 + 要补充实现”)。
6️⃣ 抽象类应用场景
- 模板方法模式:定义算法骨架,具体步骤由子类实现。
- 父类提取:把多个子类的公共属性和方法放到抽象类里,提高复用性。
- 半成品类:部分方法先写好,部分留给子类实现。
示例(模板方法模式):
abstract class Game {
public abstract void init();
public abstract void start();
public abstract void end();
// 模板方法
public final void play() {
init();
start();
end();
}
}
class Basketball extends Game {
public void init() { System.out.println("篮球准备"); }
public void start() { System.out.println("篮球开始"); }
public void end() { System.out.println("篮球结束"); }
}
📝 总结
- 抽象类用
abstract
修饰,不能实例化。 - 可以有 抽象方法和普通方法。
- 子类必须实现抽象方法,除非子类也是抽象类。
- 适合用来做 模板/父类提取/框架设计。
- 区别于接口:抽象类偏向 模板复用,接口偏向 行为规范。
发表回复