【Java 抽象类(零基础完整版超详细教程)看完彻底弄懂 】
2026/5/23 23:58:04 网站建设 项目流程


很多初学者第一次学 抽象类 都会懵:
普通类已经能写代码了,为什么还要抽象类?
抽象方法到底是空的干嘛用?
子类到底什么时候要重写、什么时候不用?

今天我用零基础、零跳跃、全程大白话+完整代码案例,一次性把「抽象类」所有知识点讲透。

适合:零基础、期末复习、考试刷题、Java入门巩固



一、先搞懂:什么是普通类?(铺垫)

普通类就是描述具体事物的完整模板。

普通类结构:

1. 成员变量:描述特征(半径、颜色、名字)
2. 构造方法:创建对象、给属性赋值
3. 普通方法:必须有方法体 {},有完整逻辑,可以直接调用

普通类最大特点:

✅ 可以直接 new 创建对象
✅ 所有方法都写好了、能直接跑

但!普通类有一个致命缺点:

无法强制子类必须实现某些功能

于是 Java 引入了:抽象类



二、为什么需要抽象类?(核心思想)

有些类太笼统、不是具体事物,不能直接 new 对象。

举例:图形 Shape

图形包含:圆、矩形、三角形……

图形本身只是一个概念、一个模板

没有具体的形状
没有具体的计算公式
不能直接算面积、周长

所以:
通用模板 → 交给抽象类
具体实现 → 交给子类

抽象类最大作用:

1. 统一规范(所有子类必须有的方法,父类统一规定)
2. 强制子类实现功能
3. 代码复用 + 多态实现



三、什么是抽象类?

使用 abstract 修饰的类,就是抽象类。

语法:

java

abstract class 类名{}




最重要一句话(必考):

抽象类不能直接 new 对象!

只能被继承,用来当模板。



四、什么是抽象方法?(重中之重)

抽象方法是抽象类的灵魂。

抽象方法特点

1. 用 abstract 修饰
2. 没有方法体 {}
3. 直接分号结尾 ;
4. 只定义规则,不写代码实现

语法:

java

public abstract 返回值 方法名();



示例:

java

public abstract double area(); public abstract double girth();




意思:

所有图形必须能算面积、周长
怎么算?交给子类自己写



五、抽象类 和 抽象方法 关系(考试必背)

两条铁律:

1. 只要类里有抽象方法 → 此类必须是抽象类
普通类绝对不能有抽象方法!
2. 抽象类可以没有抽象方法
单纯为了不让别人 new 对象,也可以定义抽象类。

最简口诀:
有抽象方法必抽象类,抽象类可无抽象方法



六、抽象类里面到底能写什么?

很多新手以为抽象类只能写抽象方法——大错特错!

抽象类和普通类几乎一样,可以包含:

1. 成员变量
2. 构造方法
3. 普通方法(有方法体)
4. 抽象方法(无方法体)

重点:抽象类有构造方法!

作用:

子类继承时,通过 super() 调用,初始化父类属性



七、哪些方法不能定义为抽象方法?(超级高频考点)

四种绝对不能 abstract:

1. 构造方法
2. static 静态方法
3. private 私有方法
4. final 方法

大白话原因(必懂)

构造方法:必须有方法体,用来初始化对象,不能空着
静态方法:属于类,不能重写
私有方法:子类看不见、继承不到,无法重写
final 方法:禁止重写,而抽象方法必须重写 → 直接矛盾

一句话总结:

不能被重写的方法,都不能是抽象方法



八、抽象类为什么不能 new 对象?

原因超简单:

1. 抽象类有空的抽象方法,没有代码体
2. 如果能 new,对象调用空方法 → 程序无逻辑、报错
3. 抽象类设计目的:模板,不是对象

抽象类只能:被继承、被子类实现



九、子类继承抽象类的两种情况(全书最核心)

情况1:子类 没有重写完所有抽象方法

规则:

子类必须也变成抽象类(加 abstract)

结果:子类也不能 new 对象

情况2:子类 重写实现所有抽象方法

规则:

子类是普通类,不用 abstract

结果:子类 可以正常 new 对象

超简总结:
没补全 → 继续抽象
补全完 → 变成普通



十、重写抽象方法的 4 条硬性规则

子类实现抽象方法必须遵守:

1. 方法名、参数列表 完全一致
2. 返回值类型 兼容
3. 访问权限 只能放大、不能缩小(public 不能变 private)
4. 建议加上 @Override 注解



十一、完整可运行项目(Shape 图形案例)

完整整合代码

java

// 抽象父类:图形类 abstract class Shape { // 成员变量 protected String name; // 抽象类构造方法(供子类调用) public Shape(String name) { this.name = name; } // 普通方法(所有子类复用) public void showName() { System.out.println("图形名称:" + name); } // 抽象方法:强制子类实现 public abstract double area(); public abstract double girth(); } // 圆形子类 class Circle extends Shape { private double radius; private final double PI = 3.14; public Circle(String name, double radius) { super(name); this.radius = radius; } // 重写所有抽象方法 @Override public double area() { return PI * radius * radius; } @Override public double girth() { return 2 * PI * radius; } } // 矩形子类 class Rectangle extends Shape { private double length; private double width; public Rectangle(String name, double length, double width) { super(name); this.length = length; this.width = width; } // 重写所有抽象方法 @Override public double area() { return length * width; } @Override public double girth() { return 2 * (length + width); } } // 测试类 public class TestShape { public static void main(String[] args) { Shape c = new Circle("圆形", 5); Shape r = new Rectangle("矩形", 4, 6); c.showName(); System.out.println("面积:" + c.area()); System.out.println("周长:" + c.girth()); System.out.println("-------------------"); r.showName(); System.out.println("面积:" + r.area()); System.out.println("周长:" + r.girth()); } }




运行结果

plaintext

图形名称:圆形 面积:78.5 周长:31.4 ------------------- 图形名称:矩形 面积:24.0 周长:20.0






十二、零基础最易错判断题(直接背)

1. 抽象类一定有抽象方法?❌ 错
2. 普通类可以有抽象方法?❌ 错
3. 抽象类可以 new 对象?❌ 错
4. 抽象类有构造方法?✅ 对
5. static / private / 构造方法可以抽象?❌ 全错
6. 子类没写完抽象方法,必须抽象?✅ 对



十三、终极背诵口诀

抽象类,abstract,
不能new,只当模板;
有抽象方法必抽象类,
抽象类可无抽象方案;
构造静态私有final,
全都不能做抽象;
子类补完方法变普通,
少补一个还得抽象;
重写方法不能乱改,
权限只能放宽不能降。



十四、总结(学完本文你掌握了什么)

1. 理解抽象类的设计思想:模板统一规范
2. 分清抽象类、抽象方法的所有语法规则
3. 掌握「子类两种继承情况」考试核心考点
4. 熟记 4种不能抽象的方法
5. 完全掌握 Shape 图形经典案例
6. 搞定所有期末选择题、判断题、代码题考点

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询