【面试干货】抽象类的意义与应用

news2024/11/28 12:41:54

【面试干货】抽象类的意义与应用

  • 1、为其他子类提供一个公共的类型
  • 2、封装子类中重复定义的内容
  • 3、定义抽象方法,子类虽然有不同的实现,但是定义时一致的
  • 4、示例代码


💖The Begin💖点点关注,收藏不迷路💖

在面向对象编程中,抽象类扮演着非常重要的角色。它们不仅为子类提供了一个公共的类型,还封装了子类中可能重复定义的内容,并允许定义抽象方法,这些方法由子类来实现具体的行为。

抽象类的意义可以用三句话来概括:

1、为其他子类提供一个公共的类型

2、封装子类中重复定义的内容

3、定义抽象方法,子类虽然有不同的实现,但是定义时一致的

1、为其他子类提供一个公共的类型

抽象类可以被视为一个模板或基类,它为所有继承自它的子类提供了一个公共的接口。这使得我们可以在不知道具体子类的情况下,就可以对它们进行某些操作。

例如,假设我们有一个Animal抽象类,它定义了一些所有动物都共有的属性(如nameage)和行为(如eat()sleep())。

然后我们可以有多个子类,如DogCatBird等,它们都继承自Animal类。这样,我们就可以创建一个Animal类型的数组或集合,并将这些不同类型的动物对象添加进去,然后进行统一的操作。

2、封装子类中重复定义的内容

在面向对象的编程中,我们经常会遇到子类之间共享某些属性和方法的情况。如果我们在每个子类中都重复定义这些属性和方法,那么不仅代码会变得冗余,而且维护起来也会非常困难。

通过抽象类,我们可以将这些共享的属性和方法封装在基类中,然后让子类继承这个基类。

这样,子类就可以直接使用这些属性和方法,而无需重复定义。这不仅可以减少代码量,还可以提高代码的可维护性。

3、定义抽象方法,子类虽然有不同的实现,但是定义时一致的

抽象类的一个重要特性就是它可以定义抽象方法。抽象方法是一种只有方法签名(方法名和参数列表),而没有方法体(即没有具体的实现)的方法。

子类必须实现抽象类中的所有抽象方法,否则子类也必须是抽象的。这种方式允许我们在基类中定义一些通用的行为,但具体的实现则交由子类来完成。

这样,我们可以确保所有的子类都遵循一定的行为规范,同时又可以允许它们根据自己的需求来实现这些行为。

4、示例代码

定义一个Animal抽象类,它包含了一个name属性、一个age属性、一个公共的eat()方法和一个抽象的makeSound()方法。

然后,我们定义了两个子类DogCat,它们都继承了Animal类,并实现了makeSound()方法。这样,我们就可以通过调用makeSound()方法来让不同的动物发出不同的声音。

// 抽象类 Animal  
public abstract class Animal {  
    protected String name;  // 名字
    protected int age;  // 年龄
  
    // 公共方法  
    public void eat() {  // 吃东西
        System.out.println("Animal is eating.");  
    }  
  
    // 抽象方法  
    public abstract void makeSound();  // 发出声音
 
  // main方法
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound(); // 输出 "Dog is barking."

        Animal cat = new Cat();
        cat.makeSound(); // 输出 "Cat is meowing."
    }
}  
  
// 子类 Dog  
public class Dog extends Animal {  
    @Override  
    public void makeSound() {  
        System.out.println("Dog is barking.");  // 狗在叫
    }  
}  
  
// 子类 Cat  
public class Cat extends Animal {  
    @Override  
    public void makeSound() {  
        System.out.println("Cat is meowing.");  // 猫在喵喵叫
    }  
}

在这里插入图片描述

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

jrebel安装使用教程(2022.4.1版本)

本方法适用于jrebel2022.4.1版本,之后的版本不再适用。 1.下载插件 下载地址 2.安装插件 可以通过idea内部安装 也可以将插件解压进idea的安装目录下的plugins。 3.激活 Team URL中填入 https://jrebel.qekang.com/{guid}这里提供两个guid生成地址&#xf…

【AI工作流-AI-Agent】FastGPT新建应用并用openai接口调用

FastGPT 简介 FastGPT是一个AI工作流搭建平台,它是一个开源框架,支持聊天,RAG(知识库),工作流编排。 缺点是不支持AI搜索,模型支持需要依赖于第三方部署框架例如oneapi,ollama等。…

aardio - 【库】lock 跨进程读写锁

import win.ui; /*DSG{{*/ var winform win.form(text"aardio form";right272;bottom203;topmost1) winform.add( button{cls"button";text"无锁演示";left27;top132;right120;bottom184;z2}; button2{cls"button";text"有锁演示…

CausalMMM:基于因果结构学习的营销组合建模

1. 摘要 在线广告中,营销组合建模(Marketing Mix Modeling,MMM) 被用于预测广告商家的总商品交易量(GMV),并帮助决策者调整各种广告渠道的预算分配。传统的基于回归技术的MMM方法在复杂营销场景…

修复 Android 手机卡在启动屏幕上的 7 种方法

Android 手机卡在启动屏幕上的情况并不常见。通常,问题出现在应用新更新或安装未知来源的应用程序后。幸运的是,您可以让您的 Android 手机跳过启动屏幕,而无需前往最近的服务中心。 当您的 Android 手机在启动屏幕上陷入无限循环时&#xf…

MSPM0G3507——PWM

在sysconfig中,左侧可以选择MCU的外设,我们找到并点击TIMER-PWM选项卡,在TIMER-PWM中点击ADD,就可以添加定时器下的PWM外设。 这里设置通道0为100Hz的频率,0%占空比的PWM,周期计数值为1000,比较…

有哪些骨传导耳机是比较推荐入手的?精选五款热门骨传导耳机推荐!

耳机基本是每人人手一台,不管是在地铁上还是在公交上,都可以看到很多人戴着耳机度过空余的时光,甚至现在人们在耳机的选择方面更加偏向于骨传导耳机,开放耳道的奇特设计在户外佩戴的时候可以更好的感知到周围的环境音,…

面试突击:深入理解 Java 中的异常

本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 前言 哈喽,大家好,我是 DanMu。今天想和大家聊聊 Java 中的异常。异常处理是一种重要的概念,因为程序总是会出现各种意料之外的问题&…

分享计算机msvcp100.dll,丢失或找不到的7个解决方法

msvcp100.dll是动态链接库文件对于执行使用 Microsoft Visual C 2010 编译器编译的应用程序至关重要。它包含了 C 标准库的实现,提供了应用程序运行时所需的核心功能,如输入/输出操作、字符串处理、数学运算和异常处理等。若系统中缺失或损坏此文件&…

win10环境配置ollama-ui运行llama3模型

先说我的笔记本电脑配置intel-i7-11390h,4核8处理器,内存16G。显卡NVIDA GeFroce MX450,2G显存,这是一台5000元左右的电脑。 我用它跑roop、sd1.5、ffusion2、ChatTTs还有pythonpytorch的自定义模型,现在用来跑llama3。当然&…

挑战Midjourney,融合近百个SD大模型的通用模型AlbedoBase XL

在SDXL的通用模型中,DreamShaperXL和juggernautXL这2款大模型一直都深受广大AI绘画者的喜爱,不可否认,这2款通用模型在很多方面表现都相当出色。 今天再给大家介绍一款基于SDXL的通用大模型:AlbedoBase XL,作者的目标…

Centos7 Mysql8.3.0 安装地址

MySQL :: Download MySQL Community Server (Archived Versions)

qt 5.6 qmake手册

qt 5.6 qmake手册 (笔者翻译的qmake手册,多数是机翻,欢迎评论区纠错修正) Qmake工具有助于简化跨不同平台开发项目的构建过程。它自动生成Makefile,因此创建每个Makefile只需要几行信息。您可以将qmake用于任何软件项目…

解决 执行 jar 命令 控制台乱码

Springboot项目,编码为utf8 打包后,为了在控制台运行时不乱码,需要在控制台中依次执行以下命令: 第一步: chcp 65001第二步: java -jar -Dfile.encodingutf-8 你的.jar

使用 GitOps 进行防灾 MinIO

想象一下,您已经花费了无数小时来完善 Docker Swarm 设置,精心设计每项服务,并调整 CI/CD 管道以实现无缝自动化。现在,想象一下这个经过微调的系统被重置为原点,不是因为严重的故障或安全漏洞,而是因为数据…

windows下mysql修改 my.ini的datadir后 `Access denied`

1. 背景 window安装mysql数据库时,不能指定数据文件存放位置(默认安装路径 "C:/ProgramData")。 只能通过修改mysql.ini来更改数据文件存放目录。 2. 问题: 修改mysql.ini后,mysql 出现 "Access denied for user ‘root‘@‘localhost‘ (using passwor…

如何清除anaconda3缓存?

如果长期使用anaconda不清理缓存,会导致anaconda占用磁盘空间越来越多,甚至系统磁盘撑爆。 清除包缓存: 打开 Anaconda Prompt 或者命令行窗口。运行以下命令清除包缓存:conda clean --all这会清除所有的包缓存,释放磁…

调试实战 | 记一次有教益的 vs2022 内存分配失败崩溃分析(续)

前言 前一阵子遇到了 vs2022 卡死的问题,在上一篇文章中重点分析了崩溃的原因 —— 当 vs2022 尝试分配 923MB 的内存时,物理内存页文件大小不足以满足这次分配请求,于是抛出异常。 本篇文章将重点挖掘一下 vs2022 在崩溃之前已经分配的内容…

关于使用绿联 USB-A转RJ45 2.5G网卡提速的解决问题

问题 网络下载速率低 网线是七类网线,外接的USB网卡驱动 我的自带网卡是 I219v 在嵌入了2.5G网络后一直无法到达1.5G以上。 平均测速300~500M 解决方案 更新了USB的网卡驱动 禁用了 I219-V的驱动。测速即可 USB驱动下载地址 https://download.csdn.net/downlo…

2024 年值得考虑的 5 款 PDF 转换器

您可以使用名为PDF 转换器(可移植文档格式)的软件应用程序将数据从一种格式转换为另一种格式,具体来说就是转换为 PDF 格式或从 PDF 格式转换为 PDF 格式。由于无论使用什么程序或平台查看,PDF 格式的格式和布局都保持不变&#x…