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

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

  • 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.mzph.cn/pingmian/31806.shtml

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

相关文章

kettle从入门到精通 第七十二课 ETL之kettle 三谈http post(含文件上传),彻底掌握参数传递

场景:群里有个小伙伴在使用http post步骤调用接口时遇到问题,postman调用正常,但是kettle中调用异常。 解决方案:既然postman调用接口正常,肯定是http post步骤中某些参数设置的不正确导致的。那就把常用的方式都梳理下…

探索AI前沿:本地部署GPT-4o,打造专属智能助手!

目录 1、获取API_key 2、开始调用 3、openai连接异常 4、解决方法: 5、调用GPT-4o 1、获取API_key 这里就不多赘述了,大家可以参考下面这篇博客 怎么获取OpenAI的api-key【人工智能】https://blog.csdn.net/qq_51625007/article/details/13763274…

Open WebUI的SearXNG网络搜索配置【403报错解决方法】

1.拉取SearXNG镜像 docker pull searxng/searxng 2.在Docker Desktop的Images界面中启动searxng容器 3.查看searxng是否部署成功 在Docker Desktop的Containers界面中,查看searxgn暴露的端口。 http://localhost:31292/ 4.修改settings.yml配置参数 在Docker De…

[火灾警报系统]yolov5_7.0-pyside6火焰烟雾识别源码

国内每年都会发生大大小小的火灾,造成生命、财产的损失。但是很多火灾如果能够早期发现,并及时提供灭火措施,将会大大较小损失。本套源码采用yolov5-7.0目标检测算法结合pyside6可视化界面源码,当检测到火灾时,能否发出…

链式二叉树

链式二叉树 链式二叉树结构二叉树的遍历二叉树前序遍历二叉树中续遍历二叉树后续遍历二叉树层序遍历 二叉树节点个数和高度等二叉树节点个数二叉树叶子节点个数二叉树第k层节点个数单值二叉树对称二叉树相同的二叉树二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历另一棵树的…

SpringCloud 基于Nacos和Eureka 实现双注册双订阅

一、使用场景/原因 过渡期迁移: 当系统从一个服务注册中心迁移到另一个时,例如从 Eureka 迁移到 Nacos,可以在过渡期内同时使用两个注册中心,确保服务平稳迁移,逐步过渡,避免一次性切换带来的风险。 兼容性考虑: 不同的…

ASP.NET Core 6.0 使用 Log4Net 和 Nlog日志中间件

前言 两年前,浅浅的学过 .NET 6,为啥要记录下来,大概是为了以后搭架子留下引线,还有抛砖引玉。 1. 环境准备 下载 建议使用 Visual Studio 2022 开发版 官网的下载地址:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具借助 Visual Studio 设计,具有自动完成…

支付宝推出NFC(近场通信)碰一碰支付功能

近日,支付宝推出NFC(近场通信)碰一碰支付功能,支持iPhone、安卓手机。NFC支付早已不是新事物,从二维码支付重回NFC支付,支付宝能撬动市场吗? 根据网友反馈,目前支付宝正在上海静安大…

海外社媒网站抓取经验总结:如何更高效实现网页抓取?

有效的网络抓取需要采取战略方法来克服挑战并确保最佳数据提取。让我们深入研究一些关键实践,这些实践将使您能够掌握复杂的网络抓取。 一、了解 Web 抓取检测 在深入探讨最佳实践之前,让我们先了解一下网站如何识别和抵御网络爬虫。了解您在这一过程中…

2-12 基于CV模型卡尔曼滤波、CT模型卡尔曼滤波、IMM模型滤波的目标跟踪

基于CV模型卡尔曼滤波、CT模型卡尔曼滤波、IMM模型滤波的目标跟踪。输出跟踪轨迹及其误差。程序已调通,可直接运行。 2-12 CV模型卡尔曼滤波 CT模型卡尔曼滤波 - 小红书 (xiaohongshu.com)

千年古城的味蕾传奇-平凉锅盔

在甘肃平凉这片古老而神秘的土地上,有一种美食历经岁月的洗礼,依然散发着独特的魅力,那便是平凉锅盔。平凉锅盔,那可是甘肃平凉的一张美食名片。它外表金黄,厚实饱满,就像一轮散发着诱人香气的金黄月亮。甘…

【过度的乐观和自信,得治】为什么数据类项目交付失败的不少?

引言:数据类项目包含数据治理和数据分析类项目,这些是数字化转型中数据能力打造,是基础性的工作。这类项目通常涉及Iaas、Paas和Saas层产品和服务,越靠近业务客户的Saas层交付服务客户满意度低,项目失败的不少&#xf…

白驹过隙,沧海桑田

01. 机缘 今天是我加入CSDN的第2620天,是我成为创作者的第1024天。2021 年 08 月 25 日我在这里分享了人生中第一篇技术文章 springboot 签名验证。 现在在回看这篇文章还能感觉到当时的青涩和技术的薄弱,后面每一篇文章的输出可能都是在不断的学习和进…

Comfy UI使用最新SD3模型,并解决报错‘NoneType‘ object has no attribute ‘tokenize‘【实测可行】

解决Comfy UI使用最新SD3模型报错’NoneType’ object has no attribute ‘tokenize’ 前几天SD3发布了,所以想着尝尝鲜,便去下载了SD3来玩一玩。使用的是Comfy UI而不是Stable Diffusion UI,这是一个比SD UI更加灵活的UI界面,使用…

多头Attention MultiheadAttention 怎么用?详细解释

import torch import torch.nn as nn# 定义多头注意力层 embed_dim 512 # 输入嵌入维度 num_heads 8 # 注意力头的数量 multihead_attn nn.MultiheadAttention(embed_dim, num_heads)# 创建一些示例数据 batch_size 10 # 批次大小 seq_len 20 # 序列长度 query torch…

视频监控平台功能介绍:内部设备管理(rtsp、sdk、onvif、ehome/ISUP、主动注册协议等)

一、功能概述 AS-V1000视频平台是一套集成了用户设备权限管理、视音频监控、大容量存储、电子地图的系统平台软件。它结合了现代视频技术、网络通讯技术、计算机控制技术、流媒体传输技术的综合解决方案,为用户提供了强大的、灵活的组网和应用能力。 AS-V1000管理端…

关于接口测试——自动化框架的设计与实现

一、自动化测试框架 在大部分测试人员眼中只要沾上“框架”,就感觉非常神秘,非常遥远。大家之所以觉得复杂,是因为落地运用起来很复杂;每个公司,每个业务及产品线的业务流程都不一样,所以就导致了“自动化…

CSS属性选择器具有不区分大小写的模式

今天,我偶然发现了 caniuse.com 项目的一期,其中提到了新的和即将推出的 CSS Level 4 选择器。 这个列表很长,并且有许多新的选择器正在开发中。一个新的选择器标志引起了我的注意;属性选择器将变成一个 i 标志,这使得…

pod设置资源请求和限制

设置资源请求和限制 实验目标: 学习如何为 Pod 设置资源请求和限制,以优化集群资源分配。 实验步骤: 创建一个 Deployment,并设置 CPU 和内存的资源请求和限制。使用 kubectl describe 命令查看资源分配情况。观察资源限制对 P…