首页 > 其他分享 >抽象类

抽象类

时间:2024-08-02 09:27:45浏览次数:6  
标签:实现 子类 接口 抽象 抽象类 方法

抽象类

1.抽象类的概念

在Java中,抽象类是一种不能被实例化的类,它通常用于表示一种基类,其中定义了一些被具体类(子类)实现或继承的抽象方法。抽象类使用abstract关键字声明。

  • 抽象方法:抽象方法是没有方法体的方法,即只有方法声明没有方法实现。抽象方法也必须用abstract关键字声明,并且抽象方法所在的类也必须是抽象类。
  • 用途:抽象类主要用于定义一个或多个抽象方法,这些方法必须由子类实现。抽象类还可以包含具体的方法实现和字段。

1.1.什么是抽象

​ 在Java中,抽象(Abstraction)是一种编程范式,用于隐藏复杂性和细节,只展示给用户或开发者需要的部分。它是面向对象编程(OOP)中的一个核心概念,旨在通过定义一组属性和行为(方法)来建模现实世界中的实体或概念。通过抽象,我们可以创建出代表这些实体或概念的类,并能够在这些类的基础上构建更加复杂和强大的应用程序。

1.2.为什么要抽象

  1. 隐藏复杂性:通过抽象,我们可以隐藏复杂的实现细节,只暴露给使用者必要的接口。这有助于降低系统的复杂性并提高代码的可读性和可维护性。
  2. 促进模块化:通过抽象,我们可以将相关的属性和方法组织在一起,形成模块化的代码结构,这有助于代码的复用和扩展。
  3. 实现多态:抽象类是实现多态性的重要手段之一。通过抽象类和它的子类,我们可以创建出具有不同行为但共享相同接口的对象集合。
  4. 代码复用:抽象类提供了一种代码复用的方式。子类可以通过继承抽象类来复用其中的代码,同时实现自己的特定功能。

2.抽象类的好处

  1. 代码复用
    抽象类允许你定义一组通用的属性和方法,这些方法在子类中可以被复用。这减少了代码重复,提高了开发效率。例如,你可以在一个抽象类中定义一些通用的功能,然后在不同的子类中实现特定的逻辑。
  2. 建立框架
    抽象类可以被用作软件框架的一部分,为应用程序的结构提供清晰的蓝图。通过定义抽象类和接口,你可以强制要求子类实现特定的方法,从而确保子类遵循一定的规范或协议。
  3. 强制实现
    当一个类继承了一个抽象类时,它必须实现抽象类中定义的所有抽象方法(除非子类也被声明为抽象类)。这种机制确保了子类不会遗漏实现重要的功能,从而提高了代码的健壮性和可维护性。
  4. 多态性
    抽象类是实现多态性的重要手段之一。通过定义抽象类和它的多个子类,你可以创建出具有不同行为但共享相同接口的对象集合。这使得在运行时可以根据需要动态地替换对象的具体实现,而无需修改代码的其他部分。
  5. 清晰的类层次结构
    使用抽象类可以清晰地表达类之间的层次关系。抽象类通常位于类层次结构的顶层,作为其他更具体类的基类。这种结构有助于理解不同类之间的关系,并简化了类的设计和实现。
  6. 提高安全性
    通过将一些敏感或复杂的操作定义为抽象方法,你可以限制对这些操作的直接访问。子类必须实现这些方法,但可以在实现过程中添加额外的安全检查或逻辑验证,从而提高了整个系统的安全性。
  7. 模板方法模式
    抽象类中的具体方法可以作为模板方法,为子类提供默认的实现。子类可以通过覆盖或扩展这些模板方法来添加自己的逻辑,而无需完全重写整个方法。这种模式提高了代码的复用性和灵活性。
  8. 易于维护和扩展
    由于抽象类提供了通用的框架和接口,因此当需要添加新的功能或修改现有功能时,可以更容易地在抽象类或子类中进行修改和扩展。这降低了代码维护的复杂性和成本。

3.抽象类、实现类与接口三者之间的区别

抽象类、实现类与接口是Java编程语言中面向对象编程(OOP)的重要概念,它们在设计和实现软件系统时扮演着不同的角色。以下是这三者之间的主要区别:

一、定义与特性

抽象类 实现类 接口
定义 抽象类是一种不能被实例化的类,它可以包含抽象方法和具体方法。抽象方法是没有具体实现的方法,必须由子类实现。 实现类是指实现了接口或继承了抽象类,并提供了所有抽象方法具体实现的类。 接口是一种完全抽象的引用类型,是一种特殊的类,它只包含方法的声明,不包含方法的实现。
关键字 使用abstract关键字声明 无特定关键字,但通常实现接口时使用implements关键字 使用interface关键字声明
实例化 不能直接实例化,只能被其他类继承 可以实例化 不能实例化,只能通过实现接口的类来引用

二、方法与属性

抽象类 实现类 接口
方法 可以包含抽象方法和具体方法 必须实现所有抽象方法(如果继承了抽象类)和接口中的方法 只包含方法的声明,不包含实现
属性 可以包含属性和具体实现 可以包含属性和具体实现 Java 8之前不能包含属性(只能包含常量),Java 8及之后可以包含默认方法和静态方法(但仍不能包含实例字段)

三、继承与实现

抽象类 实现类 接口
继承 可以被其他类继承,继承时使用extends关键字 可以继承其他类或实现接口 不能被类继承,但可以被接口继承,使用extends关键字
实现 无需实现(因为它是类,不是接口) 必须实现所有接口和抽象类中的抽象方法 无实现,必须由实现接口的类提供具体实现
多重继承 Java中不支持多重继承(即一个类不能继承多个类),但可以通过实现多个接口来达到类似效果 可以通过实现多个接口来拥有多重行为 一个类可以实现多个接口,接口之间也可以相互继承

四、用途与设计思想

抽象类 实现类 接口
用途 作为多个子类的共同父类,提供通用属性和方法的实现,同时定义一些需要子类实现的抽象方法。 提供具体功能的实现,是软件系统的最终执行单元。 定义一组方法的规范,不实现具体功能,由实现接口的类来完成具体实现。
设计思想 模板式设计,为子类提供一个基础的框架和通用的实现。 具体实现类,是面向对象的最终体现。 行为规范设计,定义了一组方法,但不关心这些方法的具体实现,只关心这些方法的存在。

五、总结

  • 抽象类:是一种不能被实例化的类,用于定义一组通用的属性和方法,并提供一个模板以供其子类进行继承和实现。它允许包含抽象方法和具体方法。
  • 实现类:是具体实现接口或继承抽象类的类,它必须提供接口中所有方法的具体实现或抽象类中所有抽象方法的具体实现。
  • 接口:是一种完全抽象的引用类型,它只包含方法的声明,不包含方法的实现。接口定义了一组方法的规范,由实现接口的类来完成具体实现。接口支持多重继承,即一个接口可以继承多个其他接口。

标签:实现,子类,接口,抽象,抽象类,方法
From: https://www.cnblogs.com/tubby233/p/18338023

相关文章

  • Java 抽象类
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。......
  • java基础6—抽象类、接口、枚举
    1.抽象类1.1简介        由于继承这个显著特点,我们可以将子类设计的更加具体,而父类更加一般化,通用化。父类可以封装不同子类的共同特征或者共同行为。而有的时候,父类中封装的方法无法具体完成子类中需要的逻辑,因此我们可以将此方法设计成抽象方法,即使用关键字abstra......
  • Java--多态和抽象类
    目录多态实现多态的条件重写重写和重载静态绑定和动态绑定向上转型和向下转型向上转型向下转型instanceof抽象类多态在Java中多态就是在完成一件事的时候,不同人去完成产生的结果不同比方说打印,我们就是要打印一个东西,如果我们交给彩色打印机,那么会打印出来彩色......
  • Java基础第四弹-----多态、抽象类、接口和异常
    文章目录Java基础知识全解第四弹一、final1.概述2.使用场景3.总结二、继承中的构造方法三、前景知识1.Object2.toString()3.instanceof4.equals()四、多态1.多态定义2.多态条件3.两种转型方式3.1向上转型3.2向下转型4.为什么要转型五、抽象类1.定义2.格式3.抽象......
  • 小一保姆级 python三大核心多态、抽象类、动态添加内容详解
    一.多态多态是面向对象编程中的一个核心概念,它允许一个接口被多个数据类型实现。这意味着,即使多个类具有不同的内部实现,它们也可以共享一个公共接口。多态的实现通常依赖于继承和方法重写。继承:子类继承父类的属性和方法。方法重写:子类重写父类中的方法,以提供特定的实现。......
  • 抽象类和接口
    在Java中,抽象类和接口是两种不同的概念,它们各自有一些独特的特点。下面分别介绍这两种概念的特点:抽象类(AbstractClass)定义:抽象类是一种不能被实例化的类,它通常包含一些抽象方法(没有方法体的方法)和/或具体实现的方法。抽象类可以有构造器、字段、具体方法和抽象方法。......
  • Java知识点----万类之祖(Object)以及 抽象类
    1.万类之祖---Object1.1finalize()    在对象即将销毁的时候,JVM自动调用的方法    例如:publicclassObjectA(这个是自己创建的文件名)extendsObject(默认加上的)1.2hashCode这个知识点我们用一幅图来帮助大家更好的理解:2.抽象类抽象类作为父类的作......
  • pymobiledevice3:如果没有抽象方法“_create_service_connection”的实现,则无法实例化
    全面披露:我不知道我在做什么。我没有编程经验。我已要求ChatGPT为我创建一个程序。ChatGPT为我创建的文件之一名为“device_detection.py”。这个特定文件应该检测通过USB端口连接到我的笔记本电脑的智能手机设备,然后在终端中打印结果。如果这就是我所需要的,那就太好了(并且......
  • 面向对象05-抽象类 / 接口 / 内部类
    一、抽象类1.abstract修饰的方法/类  publicabstractvoidwork();2.方法体中没有东西,子类必须重写(统一)3.类中有抽象方法,这个类必须也为抽象类4.注意事项: (1)抽象类不能实例化(实例化:创建对象) (2)抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类 (3)可以有构......
  • Java--抽象类
    目录抽象类的概念抽象类的语法抽象类的作用抽象类的概念在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。我们之前所学习的Animal类或者Shape类,就可......