【Java抽象类】
Java抽象类零基础彻底吃透|超详细保姆级教程(含全部考点+完整代码+习题)
适合:Java零基础入门、期末复习、考试突击、新手巩固
特点:无知识跳跃、全大白话、全考点覆盖、可直接背诵、可直接交作业
标签:Java、抽象类、零基础、面向对象、期末复习、Java入门
目录
1. 前言(为什么学抽象类)
2. 前置知识:普通类完整回顾
3. 抽象类诞生的核心思想
4. 抽象类概念 + 语法
5. 抽象方法概念 + 语法
6. 抽象类与抽象方法必考关系
7. 抽象类内部所有可写内容(超容易误区)
8. 不能抽象的4类方法(考试高频)
9. 抽象类为什么不能 new 对象
10. 子类继承抽象类 两大黄金规则(全书重点)
11. 重写抽象方法 4 条铁律
12. 全网最标准 Shape 完整实战代码(可直接运行)
13. 高频易错判断题汇总
14. 终极背诵口诀
15. 知识点思维导图
16. 课后练习题(带答案+编程题完整代码)
17. 全文总结
一、前言
很多初学者学到 抽象类 直接懵逼:
普通类已经能用了,为什么还要抽象类?
抽象方法为什么没有方法体?
子类到底什么时候要重写?什么时候也要抽象?
考试判断题、选择题疯狂踩坑
原因只有一个:知识点没有一次性学完整!
本篇博客一次性把 抽象类所有语法、所有规则、所有易错点、所有考试考点 全部讲完,零基础看完直接满分。
二、前置知识:普通类回顾(必须看懂)
普通类 = 描述具体事物的完整模板
普通类三要素:
1. 成员变量:保存特征(半径、颜色、名字)
2. 构造方法:创建对象、初始化数据
3. 普通方法:必须有方法体 {},有具体逻辑,可以直接调用
普通类特点:
✅ 可以直接 new 对象
✅ 所有方法都写完整
✅ 可以直接使用
普通类最大缺陷:无法强制子类必须实现某些功能
所以 Java 推出了 抽象类
三、为什么需要抽象类?(核心思想)
有些类太笼统、不具体、不是实物,不能 new 对象。
举例:图形 Shape
图形包含:圆、矩形、三角形
图形本身:
没有具体形状
没有固定公式
不能直接算面积、周长
所以:
通用规范 → 抽象类
具体实现 → 子类完成
抽象类作用:
1. 统一规范所有子类
2. 强制子类必须实现指定方法
3. 实现代码复用
4. 为多态做铺垫
四、什么是抽象类?
用 abstract 修饰的类 = 抽象类
语法:
java
abstract class 类名{
}
必考铁律:抽象类不能 new 对象!
只能被继承,只能当父模板。
五、什么是抽象方法?(重中之重)
抽象方法 = 只有声明、没有方法体、强制子类补全
特点:
1. 有 abstract
2. 没有 {} 方法体
3. 分号直接结束
4. 只定规则、不写代码
语法:
java
public abstract double area();
public abstract double girth();
意思:
所有图形必须会算面积、周长
怎么算?子类自己写!
六、抽象类与抽象方法 必考关系
两条死规则
1. 有抽象方法 → 一定是抽象类(普通类绝对不能有抽象方法)
2. 抽象类 → 可以没有抽象方法(可以单纯禁止 new 对象)
大白话口诀
有抽象方法必抽象类,抽象类可无抽象方法
七、抽象类里面可以写哪些内容?
(90%新手记错)
抽象类可以包含:
1. 成员变量 ✅
2. 构造方法 ✅
3. 普通方法 ✅
4. 抽象方法 ✅
超级重点:抽象类有构造方法!
作用:
子类继承后用 super() 调用,初始化父类属性
八、四类绝对不能抽象的方法(考试高频)
以下 不能加 abstract:
1. 构造方法
2. static 静态方法
3. private 私有方法
4. final 方法
逐句通俗解释
构造方法:必须有方法体,不能空
静态方法:属于类,不能重写
私有方法:子类看不到,不能重写
final 方法:禁止重写,abstract 要求必须重写 → 冲突
一句话总结:
不能被重写的方法,一律不能抽象
九、抽象类为什么不能 new 对象?
1. 包含空的抽象方法,没有代码逻辑
2. 如果可以 new,调用空方法程序崩溃
3. 抽象类定位是:模板类,不创建对象
只能:子类 new 对象
十、子类继承抽象类 两大核心规则(全书最重点)
情况一:子类 没有重写完所有抽象方法
👉 子类必须也变成抽象类(加 abstract)
👉 子类也不能 new 对象
情况二:子类 重写全部抽象方法
👉 子类是普通类
👉 可以正常 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 showInfo() {
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.showInfo();
System.out.println("面积:" + c.area());
System.out.println("周长:" + c.girth());
System.out.println("------------------");
r.showInfo();
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. 静态/私有/构造方法可以抽象?❌ 全错
6. 子类没写完抽象方法必须抽象?✅ 对
十四、抽象类终极口诀(考前速记)
抽象类,abstract,
不能new,只当模板;
有抽象方法必抽象类,
抽象类可无抽象方案;
构造静态私有final,
全都不能做抽象;
子类补完方法变普通,
少补一个还得抽象;
重写方法不能乱改,
权限只能放宽不能降。
十五、知识点思维导图(文字版)
plaintext
抽象类
├── 定义:abstract class
├── 特点:不能实例化、做模板
├── 内部结构:变量、构造、普通方法、抽象方法
├── 抽象方法:无方法体、强制重写
├── 禁止抽象:构造、static、private、final
└── 子类规则
├── 没重写完 → 子类抽象
└── 全重写 → 子类普通
十六、课后练习题(带完整答案)
1. 判断题
1. 有抽象方法的类一定是抽象类(✅)
2. 抽象类不能有普通方法(❌)
3. 抽象类可以有构造方法(✅)
4. 静态方法可以是抽象方法(❌)
2. 简答题
问:抽象类为什么不能实例化?
答:
抽象类包含未实现的抽象方法,没有方法体,若允许实例化会导致调用无逻辑代码;且抽象类是模板类,设计目的用于继承,不用于创建对象。
3. 编程题(完整标准答案)
题目
定义抽象类 Animal,包含抽象方法 eat()
定义子类 Dog、Cat 实现 eat()
完整可运行代码
java
// 抽象父类:动物类
abstract class Animal {
// 抽象方法:吃东西(只定义规范,不实现)
public abstract void eat();
}
// 子类:狗 继承动物类
class Dog extends Animal {
// 重写、实现父类抽象方法
@Override
public void eat() {
System.out.println("小狗吃骨头");
}
}
// 子类:猫 继承动物类
class Cat extends Animal {
// 重写、实现父类抽象方法
@Override
public void eat() {
System.out.println("小猫吃鱼");
}
}
// 测试类
public class TestAnimal {
public static void main(String[] args) {
// 多态写法:父类引用指向子类对象
Animal dog = new Dog();
Animal cat = new Cat();
// 调用重写后的方法
dog.eat();
cat.eat();
}
}
运行结果
plaintext
小狗吃骨头
小猫吃鱼
解题思路
1. 使用 abstract 定义抽象父类 Animal
2. 在抽象类中定义无方法体的抽象方法 eat()
3. 让 Dog、Cat 子类继承 Animal
4. 子类必须重写实现所有抽象方法,写出各自独有逻辑
5. 通过多态创建对象、调用方法,完成程序
十七、全文总结
读完本文你掌握了:
抽象类诞生意义和普通类区别
抽象类、抽象方法全部语法
四大禁止抽象方法考点
子类两种继承规则(考试核心)
完整 Shape 项目实战
所有易错点、口诀、习题全覆盖
更多推荐
所有评论(0)