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关键字进行声明。抽象方法没有方法体,只有方法签名,子类必须实现这些抽象方法,否则子类也必须声明为抽象类。

示例代码:

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

  • 当某个类的对象不需要直接创建,而只作为其他具体类的基类模板时,可以将该类声明为抽象类。
  • 当多个类拥有相似的行为,但在具体实现上有所不同,可以将共同的行为定义在抽象类中,具体实现交给子类。
  • 抽象类和抽象方法可以帮助实现多态性,即通过父类引用指向子类对象,便于统一处理不同子类的对象。
相关推荐
wellc18 分钟前
SpringBoot集成Flowable
java·spring boot·后端
IT_陈寒23 分钟前
React状态更新那点事儿,我掉坑里爬了半天
前端·人工智能·后端
Hui Baby1 小时前
springAi+MCP三种
java
hsjcjh1 小时前
【MySQL】C# 连接MySQL
java
敖正炀1 小时前
LinkedBlockingDeque详解
java
wangyadong3171 小时前
datagrip 链接mysql 报错
java
untE EADO1 小时前
Tomcat的server.xml配置详解
xml·java·tomcat
ictI CABL1 小时前
Tomcat 乱码问题彻底解决
java·tomcat
敖正炀1 小时前
DelayQueue 详解
java
uzong1 小时前
最新:阿里正式发布首款AI开发工具Meoo(秒悟),0门槛、一键部署上线
人工智能·后端