【前端学java】全网最通俗易懂的JAVA抽象概念(07)

简介: 【8月更文挑战第9天】全网最通俗易懂的JAVA抽象概念

抽象的概念

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

    抽象类的用途

    假设我们开了一个汽车玩具厂,现在要造奔驰宝马系列玩具。这两种玩具的功能基本是一致,只是车的喇叭音乐不同。
    由于只是车的内置喇叭(trumpet)不同,那么我们造的时候,我们首先开发一套车的模板(Car)即可,车的骨架、内部零件什么的都用一样的。生产奔驰(Benchi)系列的车,我们去奔驰车间给他装上奔驰的内置喇叭(Benchi extends Car);生产宝马系列的车,我们去宝马(Baoma)车间给他装上宝马的内置喇叭(Baoma extends Car)。
    现在,我们奔驰系列的车模板和宝马系列的车模板就造好了,出厂每一个车的时候,给车模套上车壳就完工了。

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

abstract class Car {
   
    String name;
    public Car(String name){
   
        this.name = name;
    }
    // 每个车都可以跑
    void run(){
   
        System.out.println(this.name + "跑起来了");
    }
    // 每个车的喇叭
    abstract void trumpet()
}

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

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

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

class Bnechi extends Car {
   
    public Bnechi(String name){
   
        super(name);
    }
    public void trumpet(){
   
        System.out.println("我是奔驰,啦啦啦");
    }
}

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

class Baoma extends Car {
   
    public Baoma(String name){
   
        super(name);
    }
    public void trumpet(){
   
        System.out.println("我是宝马,啦啦啦");
    }
}

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

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

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

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

public class CarFactory {
   
    public static void main(String[] args) {
   
        // 生产奔驰
        Bnechi BCA = new Bnechi("奔驰A级");
        BCA.run();
        BCA.trumpet();
        // 生产宝马
        Baoma BMW1 = new Baoma("宝马1系");
        BMW1.run();
        BMW1.trumpet();
    }
}

语法详解

抽象类

抽象类使用abstract关键字进行声明,它可以包含抽象方法普通方法
它无法直接创建抽象类的实例,只能通过继承它的子类来使用。抽象类通常用于定义类的共同特征和行为,而将具体的实现细节留给子类来完成。
示例代码:

abstract class Car {
   
    String name;
    public Car(String name){
   
        this.name = name;
    }
     // 普通方法
    void run(){
   
        System.out.println(this.name + "跑起来了");
    }
    // 抽象方法,子类需要实现具体的功能,不写函数体
    abstract void trumpet()
}
  • 声明了一个String类型的变量name,表示车的名称。
  • 定义了一个构造方法Car(String name),用于初始化车的名称。
  • 声明了一个非抽象方法run(),用于输出车名并显示它在跑。
  • 声明了一个抽象方法trumpet(),没有具体实现,需要在子类中重写。

    抽象方法

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

    abstract class Car {
         
      String name;
      public Car(String name){
         
          this.name = name;
      }
      // 每个车都可以跑
      void run(){
         
          System.out.println(this.name + "跑起来了");
      }
      // 每个车的音乐
      abstract void trumpet();
    }
    // 子类继承父类
    class Bnechi extends Car {
         
      public Bnechi(String name){
         
          super(name);
      }
      // 子类完善父类的抽象方法
      public void trumpet(){
         
          System.out.println("我是奔驰,啦啦啦");
      }
    }
    // 子类继承父类
    class Baoma extends Car {
         
      public Baoma(String name){
         
          super(name);
      }
      // 子类完善父类的抽象方法
      public void trumpet(){
         
          System.out.println("我是宝马,啦啦啦");
      }
    }
    

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

  • 当某个类的对象不需要直接创建,而只作为其他具体类的基类模板时,可以将该类声明为抽象类。

  • 当多个类拥有相似的行为,但在具体实现上有所不同,可以将共同的行为定义在抽象类中,具体实现交给子类。
  • 抽象类和抽象方法可以帮助实现多态性,即通过父类引用指向子类对象,便于统一处理不同子类的对象。
相关文章
|
4月前
|
前端开发 关系型数据库 MySQL
【前端学java】MySQL数据库的本地安装
【8月更文挑战第12天】MySQL数据库的本地安装
48 3
|
4月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
28天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
40 1
|
2月前
|
存储 前端开发 JavaScript
前端必备知识:闭包的概念、作用与应用
前端必备知识:闭包的概念、作用与应用
20 1
|
2月前
|
前端开发 JavaScript 程序员
【从前端入门到全栈】Node.js 之核心概念
【从前端入门到全栈】Node.js 之核心概念
|
2月前
|
前端开发 JavaScript Shell
深入解析前端构建利器:webpack核心概念与基本功能全览
深入解析前端构建利器:webpack核心概念与基本功能全览—
26 0
|
3月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
4月前
|
设计模式 前端开发 Java
【前端学java】SpringBootWeb极速入门-分层解耦(03)
【8月更文挑战第13天】SpringBootWeb极速入门-分层解耦(03)
24 2
【前端学java】SpringBootWeb极速入门-分层解耦(03)
|
4月前
|
开发框架 前端开发 Java
【前端学java】SpringBootWeb极速入门-实现一个简单的web页面01
【8月更文挑战第12天】SpringBootWeb极速入门-实现一个简单的web页面01
74 3
【前端学java】SpringBootWeb极速入门-实现一个简单的web页面01
|
4月前
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
58 2
【前端学java】如何从前端视角快速学习Maven