【Java 抽象类(零基础完整版超详细教程)看完彻底弄懂 】
很多初学者第一次学 抽象类 都会懵普通类已经能写代码了为什么还要抽象类抽象方法到底是空的干嘛用子类到底什么时候要重写、什么时候不用今天我用零基础、零跳跃、全程大白话完整代码案例一次性把「抽象类」所有知识点讲透。适合零基础、期末复习、考试刷题、Java入门巩固一、先搞懂什么是普通类铺垫普通类就是描述具体事物的完整模板。普通类结构1. 成员变量描述特征半径、颜色、名字2. 构造方法创建对象、给属性赋值3. 普通方法必须有方法体 {}有完整逻辑可以直接调用普通类最大特点✅ 可以直接 new 创建对象✅ 所有方法都写好了、能直接跑但普通类有一个致命缺点无法强制子类必须实现某些功能于是 Java 引入了抽象类二、为什么需要抽象类核心思想有些类太笼统、不是具体事物不能直接 new 对象。举例图形 Shape图形包含圆、矩形、三角形……图形本身只是一个概念、一个模板没有具体的形状没有具体的计算公式不能直接算面积、周长所以通用模板 → 交给抽象类具体实现 → 交给子类抽象类最大作用1. 统一规范所有子类必须有的方法父类统一规定2. 强制子类实现功能3. 代码复用 多态实现三、什么是抽象类使用 abstract 修饰的类就是抽象类。语法javaabstract class 类名{}最重要一句话必考抽象类不能直接 new 对象只能被继承用来当模板。四、什么是抽象方法重中之重抽象方法是抽象类的灵魂。抽象方法特点1. 用 abstract 修饰2. 没有方法体 {}3. 直接分号结尾 ;4. 只定义规则不写代码实现语法javapublic abstract 返回值 方法名();示例javapublic abstract double area(); public abstract double girth();意思所有图形必须能算面积、周长怎么算交给子类自己写五、抽象类 和 抽象方法 关系考试必背两条铁律1. 只要类里有抽象方法 → 此类必须是抽象类普通类绝对不能有抽象方法2. 抽象类可以没有抽象方法单纯为了不让别人 new 对象也可以定义抽象类。最简口诀有抽象方法必抽象类抽象类可无抽象方法六、抽象类里面到底能写什么很多新手以为抽象类只能写抽象方法——大错特错抽象类和普通类几乎一样可以包含1. 成员变量2. 构造方法3. 普通方法有方法体4. 抽象方法无方法体重点抽象类有构造方法作用子类继承时通过 super() 调用初始化父类属性七、哪些方法不能定义为抽象方法超级高频考点四种绝对不能 abstract1. 构造方法2. static 静态方法3. private 私有方法4. final 方法大白话原因必懂构造方法必须有方法体用来初始化对象不能空着静态方法属于类不能重写私有方法子类看不见、继承不到无法重写final 方法禁止重写而抽象方法必须重写 → 直接矛盾一句话总结不能被重写的方法都不能是抽象方法八、抽象类为什么不能 new 对象原因超简单1. 抽象类有空的抽象方法没有代码体2. 如果能 new对象调用空方法 → 程序无逻辑、报错3. 抽象类设计目的模板不是对象抽象类只能被继承、被子类实现九、子类继承抽象类的两种情况全书最核心情况1子类 没有重写完所有抽象方法规则子类必须也变成抽象类加 abstract结果子类也不能 new 对象情况2子类 重写实现所有抽象方法规则子类是普通类不用 abstract结果子类 可以正常 new 对象超简总结没补全 → 继续抽象补全完 → 变成普通十、重写抽象方法的 4 条硬性规则子类实现抽象方法必须遵守1. 方法名、参数列表 完全一致2. 返回值类型 兼容3. 访问权限 只能放大、不能缩小public 不能变 private4. 建议加上 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. 搞定所有期末选择题、判断题、代码题考点