抽象类:当父类的某些方法,需要声明,但是有不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。
| abstract class className{ |
| |
| |
| |
| |
| |
| } |
1. 概念:
- 抽象方法没有方法体,只有方法声明
- 抽象类会被继承,由其子类来实现抽象方法
- 用abstract修饰类时,该类就是抽象类
- 用abstract修饰方法时,该方法就是抽象方法
- 抽象类的价值更多作用是在于设计,设计者设计好后,让子类继承实现抽象类
- 抽象类在框架和设计模式中使用较多
- 抽象类不一定要包含abstract方法,可以有普通方法
- 抽象类不能被实例化
- 一旦包含抽象方法,该类就必须是抽象类
- abstract只能修饰类和方法,不能修饰属性和其他
2. 使用细节:
| - 抽象类可以有任意成员(非抽象方法、构造器、静态属性等) |
| - 抽象方法不能有方法体 |
| - 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非他自己也声明为抽象类 |
| - 抽象方法不能使用private、final和static修饰,因为这些关键字和重写相违背 |
| - 抽象类中的普通方法和属性可以使用任意修饰符 |
3. 抽象类实践——模版设计模式
| 抽象的概念我的理解是:主要是提取共性的东西,用来提高代码复用 |
| 将共有的方法提取到抽象父类中,将变化的部分使用抽象方法的方式来表示,通过普通方法调用抽象方法,利用到了父类与子类间的继承和多态,不同的子类对象可以动态调用其实现的父类抽象方法。 |
| |
| abstract class AABB { |
| public void calculate() { |
| long startTime = System.currentTimeMillis(); |
| job(); |
| long endTime = System.currentTimeMillis(); |
| System.out.println(endTime - startTime); |
| } |
| abstract void job(); |
| } |
| class AA extends AABB { |
| public void job() { |
| long num = 0; |
| for (long i = 0; i < 100000; i++) { |
| num += i; |
| } |
| } |
| } |
| class BB extends AABB { |
| public void job() { |
| long num = 0; |
| for (long i = 0; i < 100000; i++) { |
| num *= i; |
| } |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!