JavaSE16——抽象类(Abstract Class)

news2024/11/19 1:44:41

抽象类(Abstract Class)

1 抽象类概述

抽象类是面向对象编程中的一个重要概念,它是一种特殊的类。抽象类不能被实例化,只能用作其他类的基类(父类),通过继承抽象类来实现其子类的定义。

在继承体系中,由于父类的设计应该保证继承体系中所有子类的共性,子类往往比父类要描述的更加清晰、具体;因此我们有时需要将父类设计的抽象化;即方法只声明方法体,而没有方法具体功能,我们把没有方法主体的方法称为抽象方法包含抽象方法的类就是抽象类

举例

1. 厨师    成员变量:工号,姓名,工资    成员方法:工作(炒菜)
2. 保安    成员变量:工号,姓名,工资    成员方法:工作(检查外来人员)
3. 保洁    成员变量:工号,姓名,工资    成员方法:工作(负责公司的清洁)

图解:

在这里插入图片描述

定义

  • 抽象方法 :没有方法体的方法。
  • 抽象类:包含抽象方法的类。

2 abstract使用格式

使用 abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。

定义格式:

修饰符 abstract 返回值类型 方法名 (参数列表);

代码举例:

public abstract void work()

1 抽象类

如果一个类包含抽象方法,那么该类必须是抽象类。

定义格式:

abstract class 类名字 { 
	
}

代码举例:

public abstract class Animal {
	public abstract void run()}

2 抽象的使用

1)继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。

2)必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。

抽象类是不可以进行实例化的,抽象类本就是包含有无法实例化的抽象方法,或者说这个方法是没有任何意义的,他存在的意义就是让子类去实现它;因此抽象类是不可以实例化的,也就是不能创建对象;

代码举例:


public class Demo01 {
    public static void main(String[] args) {
        
    }
}

/**
 * 员工类(抽象)
 */
abstract class Employee {

    private String id;
    private String name;
    private Double salary;

    public Employee() {
    }

    public Employee(String id, String name, Double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    // 抽象方法不能有方法体
    public abstract void work();        // 表示员工本就有工作,但是每个员工的工作内容是不一样的(由具体的子类来实现)
}

/**
 * 厨师类
 */
class Cook extends Employee {

    // 必须重写父类的抽象方法
    @Override
    public void work() {
        System.out.println("炒菜");
    }
}


/**
 * 保洁类
 */
class Cleaner extends Employee {

    // 必须重写父类的抽象方法
    @Override
    public void work() {
        System.out.println("检查外来人员");
    }
}

/**
 * 保安类
 */
class Security extends Employee {

    // 必须重写父类的抽象方法
    @Override
    public void work() {
        System.out.println("负责公司清洁");
    }
}

此时的方法重写,是子类对父类抽象方法的完成实现,我们将这种方法重写的操作,也叫做实现方法

3 抽象类的特点和概述

  1. 抽象类用关键字"abstract"进行声明:在Java中,通过使用关键字"abstract"来声明一个抽象类。抽象类不能被直接实例化,只能作为父类被继承。
  2. 抽象方法和非抽象方法:抽象类可以包含抽象方法和非抽象方法。
    • 抽象方法:没有具体实现的方法,只有方法声明,没有方法体。抽象方法必须使用关键字"abstract"进行声明。子类继承抽象类后,必须实现抽象类中的所有抽象方法。
    • 非抽象方法:有具体实现的方法,在抽象类中可以直接定义和实现。子类继承抽象类后,可以直接继承和使用非抽象方法。
  3. 规范和约束子类:抽象类定义了一组规范和约束,要求其子类提供具体的实现。通过继承抽象类,子类可以获得抽象类的属性和方法,并根据具体需求进行实现。
  4. 多态性:抽象类可以通过多态的方式,通过抽象类的引用指向其子类的对象。这种多态性可以提高代码的灵活性和扩展性。

抽象类的应用场景主要包括:

  • 定义通用的规范和约束,在子类中实现具体细节。
  • 作为框架设计的基础,定义抽象类提供的核心方法,由子类根据需求进行扩展和实现。
  • 统一管理一组相关的类,提供公共的属性和方法。

3 抽象类注意事项

关于抽象类的使用,以下为语法上要注意的细节,虽然条目较多,但若理解了抽象的本质,无需死记硬背。

  1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

​ 2.抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。

​ 3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。

​ 4.抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。

理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。

总结起来,抽象类是一种具有抽象方法和非抽象方法的特殊类,用于定义规范和约束,要求子类提供具体的实现。它具备多态性和代码复用的特性,是面向对象编程中重要的概念之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1046793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某瑞集团安全技术研发岗位面试

本文由掌控安全学院 - sbhglqy 投稿 一、自我介绍 阿吧阿吧,不多说 二、就ctf比赛经历方面提些问题 面试官:ctf打了多久了 我:两三年了。 面试官:得过什么奖项没有 我:本科的时候得过一个校一等奖。 面试官&#x…

跳槽去搞国产大模型,收入能涨多少?

原创:谭婧 夏尽秋来,2023年国产大模型看似喧闹已止,进入稳定竞争期。 作为一种新的IT解决方案,国产大模型一出生便伴随着激烈竞争。 外有GPT4,内有多家公司角逐“中国版ChatGPT”。 据我所知,就国内某家头部…

Mysql 子查询,最值查询

1.leetcode-184:查找部门内最高的薪水 首先是一个子查询,找出一个部门里最高的那个工资 随后查找最终需要的值,并且部门编号以及薪水应该包含在这个子查询中 最终答案: # Write your MySQL query statement below SELECT Depar…

全渠道客服体验:Rocket.Chat 的无缝互动 | 开源日报 No.41

RocketChat/Rocket.Chat Stars: 36.9k License: NOASSERTION Rocket.Chat 是一个完全可定制的开源通信平台,适用于具有高标准数据保护要求的组织。我们是团队沟通场景下的最终免费开源解决方案,可以实现同事之间、公司之间或客户之间的实时对话。提高生…

LiveGBS流媒体平台GB/T28181功能-海康大华摄像头接入无法语音对讲通道为0无法播放时候如何抓包分析windows抓包和Linux抓包

LiveGBS通道数为0无法播放的时候如何抓包分析windows抓包和Linux抓包 1、第一步:抓包工具准备1.1、Linux1.2、windows 2、第二步:找到设备出口ip3、第三步:执行命令抓设备出口ip3.1 Linux3.2 Windwos 4、第四步:触发相关页面操作4…

操作系统备考学习 day6(2.3.2 - 2.3.4)

操作系统备考学习 day6 第二章 进程与线程2.3 同步与互斥2.3.2 实现临界区互斥的基本方法单标记法双标志先检查法双标志后检查法Peterson算法 进程互斥的硬件实现方法中断屏蔽方法TestAndSet指令Swap指令 2.3.3 互斥锁2.3.4 信号量整型信号量记录型信号量 第二章 进程与线程 2…

安利上榜福布斯中国客户服务企业

9月25日至27日,福布斯中国、中国电子商会、保定市人民政府联合主办的“数智化服务产业发展论坛暨2022福布斯中国客户服务企业Top 100评选”在保定举办。活动通过剖析企业经营能力、企业服务能力、客服运营能力、企业发展潜力等多方面数据和信息,对数智化…

CH34X-MPHSI高速Master扩展应用—I2C设备调试

一、前言 本文介绍,基于USB2.0高速USB转接芯片CH347,配合厂商提供的USB转MPHSI(Multi Protocol High-Speed Serial Interface)Master总线驱动(CH34X-MPHSI-Master)为系统扩展I2C总线的用法,除…

python字符串前加r、f、u、l 的区别

嗨喽,大家好呀~这里是爱看美女的茜茜呐 👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可 f-strings 是…

Kubernetes基础(三)-Service外部网络访问方式

1 概述 NodePort、LoadBalancer 和 Ingress 都是将集群外部流量导入到集群内的方式,只是实现方式不同。以下是三种方式的工作原理 注意:这里说的每一点都基于Google Kubernetes Engine。如果用 minikube 或其它工具,以预置型模式&#xff08…

基于nodejs+vue学生成绩动态追踪管理系统_x3ime-

这个功能模块用来让工作人员进行后端登录。管理人员通过网站。在输入自己的用户名和密码、角色进行登录,登录后管理人员就可以对后台的信息相关的操作。 首先,设计后端管理的登陆页面。对页面的各个板块进行详细的设计,规划它们的字体大小&am…

数据存储——(探究内存里的秘密)

内存中的数据是代码的基因,相当于人体中的DNA。 你看代码就是看内存,因此了解内存中的数据存储十分有必要。 内容较多,制作不易,多多点赞支持一下,我自己会总结科班和it培训班的精华共享。 下面的图片有代码和解释 内…

钡铼BL302与PLC:提升酿酒业效率与品质的利器

啤酒是人类非常古老的酒精饮料,是水和茶之后世界上消耗量排名第三的饮料。 啤酒在生产过程中主要有制造麦芽、粉碎原料、糖化、发酵、贮酒後熟、过滤、灌装包装等工序流程。需要用到风选机、筛分机、糖化锅、发酵设备、过滤机、灌装机、包装机等食品机械设备。这些食…

西门子S7协议及报文格式详解

一、简介 S7Comm(S7 Communication)是西门子专有的协议,是西门子S7通讯协议簇里的一种。 S7通信协议是西门子S7系列PLC内部集成的一种通信协议,是S7系列PLC的精髓所在。 它是一种运行在传输层之上的(会话层/表示层/应…

广州华锐互动:VR结绳逃生训练模拟真实火灾场景,增强训练沉浸感

随着科技的发展,虚拟现实(VR)技术已被广泛应用到各个领域,其中包括消防训练。VR消防结绳训练是一种创新的消防训练方式,它通过虚拟现实技术模拟真实的灭火场景,使消防人员能够在无风险的环境中进行高强度的…

stable diffusion和gpt4-free快速运行

这是一个快速搭建环境并运行的教程 stable diffusion快速运行gpt快速运行 包含已经搭建好的环境和指令,代码等运行所需。安装好系统必备anaconda、conda即可运行。 stable diffusion快速运行 github: AUTOMATIC1111/稳定扩散网络UI:稳定扩散网页用户界…

2024新款进销存系统erp管理系统

环境要求 服务器系统 Linux、Unix、Mac、Windows web服务器 Apache、Nginx、IIS、其他 MySQL版本 5.7 PHP版本 8.0 采购价格 当前商品如进行过采购,则采购价格列内会出现价格信息,及采购的历史价格,点击后面的图标进入历史信息页面。 库存…

OJ练习第182题——字典树(前缀树)

字典树(前缀树) 208. 实现 Trie (前缀树)题目描述示例知识补充官解代码 211. 添加与搜索单词 - 数据结构设计题目描述示例思路Java代码 208. 实现 Trie (前缀树) 力扣链接:208. 实现 Trie (前缀树) 题目描述 示例 知识补充 插入字符串 我…

SPI—读写串行FLASH

一、SPI协议简介 SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛的使用在ADC、LCD等设备与MCU之间,要求通讯速率比较高的场合。 SP…

实验室信息管理系统(LIMS)全套源码,ASP.NET Dotnet 3.5 +EXT.NET+MSSQL 2018

实验室信息管理系统(LIMS)源码 检测实验室LIMS系统全套源码 技术架构:ASP.NET Dotnet 3.5 EXT.NETMSSQL 2018 实验室信息管理系统(LIMS)能够完成实验室数据和信息的收集、分析、报告和管理的系统。它是现代实验室综合管理的一种理念、技术、方…