当前位置: 首页 > news >正文

【Java 抽象类(零基础完整版超详细教程)看完彻底弄懂 】


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

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

适合:零基础、期末复习、考试刷题、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. 搞定所有期末选择题、判断题、代码题考点

http://www.jsqmd.com/news/873979/

相关文章:

  • 【Telephony】IPC 跨层通信机制深度解析 (Binder HAL)
  • Midjourney渐变美学的神经渲染原理(附RGB-HSV-LCH三空间渐变映射对照表·行业首曝)
  • 【199管理类联考】逻辑66考点(第一轮复习)
  • 2026年商丘口碑好的墙布企业大揭秘,你知道几家? - 资讯纵览
  • 2026成都文化墙设计技术解析与靠谱服务商选型指南:成都校园走廊文化设计公司、成都社区文化墙设计公司、成都中小学文化建设公司选择指南 - 优质品牌商家
  • 【教育科技圈内部流传】:Claude提示词工程在K12课件创作中的6个致命误区(92%教师正在踩坑)
  • Go语言接口设计:最小接口原则
  • 2026年常压快开人孔权威厂商评测:蛭石隔热管托/隔热管托/可变式弹簧支吊架/固定支吊架/坐式管托/垂直吊盖人孔/选择指南 - 优质品牌商家
  • RAG已死?大模型主动“翻文件”实现精准检索,告别幻觉与低效!附GitHub源码!
  • 让 AI 做代码 Review(CR):测试如何提前在代码提交阶段发现 Bug?
  • C++ 学习笔记---容器---vector(后续会更新)
  • 2026年探秘:专业高温轴流泵厂商究竟有何独特魅力? - 资讯纵览
  • 【游戏设计】游戏循环的奥秘
  • OpenClaw本地Agent网关机器人对接全解析:技能MCPRAG分层搞定!
  • 2026年东莞阳台改造综合实力榜最新公布:6家口碑扎实、交付稳健的企业推荐 - 优家闲谈
  • 大模型Function Calling的底层原理
  • 【Midjourney渐变风格终极指南】:20年AI视觉专家亲授7大高阶参数组合与色彩过渡黄金公式
  • 解决华硕灵耀X双屏Linux下扬声器不工作的问题
  • 如何用COMET框架实现专业级机器翻译质量评估:从零到精通的完整指南
  • Go语言依赖注入:构造函数注入
  • 【AI Agent社交应用实战指南】:2024年已验证的7大落地场景与避坑清单
  • 2026年重庆阳台改造优选指南:七维评估模型筛选出的6家靠谱企业 - 优家闲谈
  • 第1篇:开篇|Claude Code 源码泄露始末与核心价值
  • Scrapy-Pinduoduo:高效构建拼多多电商数据采集系统
  • 当传统CMS遇上AI Agent写作引擎:一场静默升级正在发生——5家上市公司已悄然切换,技术栈兼容性白皮书紧急发布
  • 清远搬工厂公司哪家好?口碑 TOP5 推荐 + 避坑指南 - 从来都是英雄出少年
  • 深度学习安全帽佩戴检测系统
  • Serverless扩缩容:实现自动弹性和成本优化
  • 清远搬厂公司口碑排名:5 家靠谱厂房搬家服务商推荐 - 从来都是英雄出少年
  • Go语言表驱动测试:测试数据组织