很多初学者第一次学 抽象类 都会懵:
普通类已经能写代码了,为什么还要抽象类?
抽象方法到底是空的干嘛用?
子类到底什么时候要重写、什么时候不用?
 
今天我用零基础、零跳跃、全程大白话+完整代码案例,一次性把「抽象类」所有知识点讲透。
 
适合:零基础、期末复习、考试刷题、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. 搞定所有期末选择题、判断题、代码题考点
 

更多推荐