JAVA抽象概念大揭秘:用生动有趣的方式,带你领略编程的无限可能

抽象的概念

  • 抽象类抽象方法是面向对象编程中的重要概念,用于实现抽象和继承的特性。
  • 抽象类是不能被实例化的类,通常用作其他类的基类。
  • 抽象方法是在抽象类中声明但没有具体实现的方法,需要在子类中实现具体的功能。

抽象类的用途

假设我们开了一个汽车玩具厂,现在要造奔驰宝马 系列玩具。这两种玩具的功能基本是一致,只是车的喇叭音乐不同。

由于只是车的内置喇叭(trumpet) 不同,那么我们造的时候,我们首先开发一套车的模板 (Car) 即可,车的骨架、内部零件什么的都用一样的。生产奔驰(Benchi) 系列的车,我们去奔驰 车间给他装上奔驰的内置喇叭 (Benchi extends Car) ;生产宝马系列的车,我们去宝马(Baoma) 车间给他装上宝马的内置喇叭 (Baoma extends Car)。

现在,我们奔驰系列的车模板和宝马系列的车模板就造好了,出厂每一个车的时候,给车模套上车壳就完工了。

我们把生产汽车模板的过程抽象成一个Car类

由于每个车都必须有喇叭 ,因此trumpet 方法是必须存在的。但每个系列的车喇叭不同,因此,在Car类中,我们无法具体指明方法内容(没有写方法体)。这个trumpet方法就是一个抽象方法, 我们用abstract给他标记一下。

由于Car缺少喇叭、车壳等零件(trumpet是抽象抽象方法,Car因此是抽象类 ),因此它无法直接生产玩具(不能实例化)。我们需要去不同车间继续完善它 (只能被子类继承、完善方法)

我们去奔驰车间给他装上奔驰的喇叭,奔驰系列玩具的车模就做好了。

然后,我们去宝马车间给他装上喇叭,宝马系列的玩具车模就做好了

最后,我们在奔驰和宝马车间就可以不断的生产玩具了。

上面的代码中,我们定义了一个sountrumpetd方法,这是Car必须有的方法,但是每个子类(奔驰、宝马)的这个方法是不同的,因此我们无法具体写成这个方法的内容。

那么,这个sound 方法就是一个抽象方法 ,对应的,Car就是一个抽象类 。Car是不完整的,因此它不能直接生产成一个玩具车 (不能实例化)。

我们需要用Car这个模板来完善我们的奔驰系列玩具


语法详解

抽象类

抽象类使用abstract 关键字进行声明,它可以包含抽象方法普通方法

它无法直接创建抽象类的实例,只能通过继承它的子类来使用。抽象类通常用于定义类的共同特征和行为,而将具体的实现细节留给子类来完成。

示例代码:

  • 声明了一个String 类型的变量name,表示车的名称。

  • 定义了一个构造方法Car(String name) ,用于初始化车的名称。

  • 声明了一个非抽象方法run() ,用于输出车名并显示它在跑。

  • 声明了一个抽象方法trumpet() ,没有具体实现,需要在子类中重写。

抽象方法

抽象方法是在抽象类中声明但没有具体实现的方法,它使用abstract关键字进行声明。抽象方法没有方法体,只有方法签名,子类必须实现这些抽象方法,否则子类也必须声明为抽象类。

示例代码:

抽象类和抽象方法的使用场景:

  • 当某个类的对象不需要直接创建,而只作为其他具体类的基类模板时,可以将该类声明为抽象类。
  • 当多个类拥有相似的行为,但在具体实现上有所不同,可以将共同的行为定义在抽象类中,具体实现交给子类。
  • 抽象类和抽象方法可以帮助实现多态性,即通过父类引用指向子类对象,便于统一处理不同子类的对象。
相关推荐
优橙教育2 分钟前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
掘金码甲哥2 分钟前
这块终端神器, 必须吹爆!
后端
Csvn1 小时前
📊 SQL 入门 Day 8:集合操作 — 用 SQL 做数学里的"并交差"
后端·sql
腻害兔2 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
碎光拾影2 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Miao121313 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
腻害兔3 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
码事漫谈4 小时前
告别数据孤岛与AI“水土不服”:金仓多模融合时序库如何让数据真正服务于业务
后端
IT_陈寒4 小时前
Redis的持久化配置把我坑惨了:你以为数据安全了?
前端·人工智能·后端
星栈4 小时前
Node 接口该写同步还是异步?
后端·node.js