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

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

  • 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.rhkb.cn/news/356215.html

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

相关文章

STM32硬件接口I2C应用(基于FT6336)

目录 概述 1 硬件介绍 1.1 ST7796-LCD 1.2 MCU IO与LCD PIN对应关系 1.3 MCU IO与Touch PIN对应关系 2 FT6336的寄存器 2.1 FT6336寄存器列表 2.2 寄存器功能介绍 3 STM32Cube控制配置I2C 3.1 软硬件版本信息 3.2 I2C参数配置 3.3 使用STM32Cube产生工程 4 HAL库…

C#修改 EXE 文件图标和 winForm 窗口图标

修改 EXE 文件图标 1.准备好图片,转换为 Icon 图片; 2.右键工程,选择属性; 3.选择 Icon 图标即可; 4.重新生成可执行文件,查看。 修改 winForm 窗口图标 1.选中 winForm ,查看属性&#x…

你好,复变函数1.0

输入时用后缀&#xff0c;开头空格 #include <easyx.h> #include <stdio.h> #define PI 3.141592653589793 #define E 2.718281828459045 #define K (1.0 / 256.0) #define K_1 256.0 //#define LINE//决定函数是用线画还是用点画 struct C {double i;double r;…

Unity3d 游戏暂停(timeScale=0)引起的deltaTime关联的系列问题解决

问题描述 游戏暂停的功能是通过设置timeScale0实现的&#xff0c;不过在暂停游戏的时候&#xff0c;需要对角色进行预览和设置&#xff0c;为了实现这个功能&#xff0c;是通过鼠标控制相机的操作&#xff0c;为了使相机的操作丝滑&#xff0c;获取鼠标操作系数乘以Time.delta…

网络编程(TCP协议,UDP协议)

目录 网络编程三要素 IP IPv4 InetAddress类 端口号 协议 UDP协议 UDP协议发送数据 UDP协议接收数据 UDP的三种通信方式(代码实现) TCP协议 TCP通信程序 三次握手和四次挥手 练习 1、客户端:多次发送数据服务器:接收多次接收数据&#xff0c;并打印 2、客户端…

技术分享 | 基于 API 解析的 Python 爬虫

最近各大高校纷纷翻拍 Coincidence 抖肩舞&#xff0c;需要对这种流行现象进行数据分析。数据分析首先需要有数据&#xff0c;本文介绍了爬取 B 站相应视频的评论、弹幕、播放量、点赞数等数据的方法。爬虫有多种实现方法&#xff0c;大型的网络爬虫多基于成熟的爬虫框架&#…

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

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

这款跨界的软件也是非常强大!更快, 更轻, 更丝滑!

在网络世界中&#xff0c;一个好的浏览器就像一艘快速的帆船&#xff0c;帮助我们更快地到达目的地。迅雷浏览器正是这样一艘帆船&#xff0c;它不仅能够快速地带领我们浏览信息&#xff0c;还能提供安全的下载体验&#xff0c;让我们的网络生活更加丰富多彩。 迅雷浏览器&…

Python | Leetcode Python题解之第172题阶乘后的零

题目&#xff1a; 题解&#xff1a; class Solution:def trailingZeroes(self, n: int) -> int:ans 0while n:n // 5ans nreturn ans

AI播客下载:Machine Learning Street Talk(AI机器学习)

该频道由 Tim Scarfe 博士、Yannic Kilcher 博士和 Keith Duggar 博士管理。 他们做了出色的工作&#xff0c;对每个节目进行了彻底的研究&#xff0c;并与机器学习行业中一些受过最高教育、最全面的嘉宾进行了双向对话。 每一集都会教授一些新内容&#xff0c;并且提供未经过滤…

VMware Workstation安装Windows Server2019系统详细操作步骤

虚拟机版本 VMware Workstation 16 Prp 16.2.5 build-20904516 实现操作 创建虚拟机 创建新的虚拟机 自定义->下一步 默认即可&#xff0c;下一步 稍后安装操作系统->下一步 按照图下所示选择好系统->下一步 设置好虚拟机名称和位置->下一步 默认即可&#xff0…

基于uni-app和图鸟UI的智慧农业综合管控平台小程序技术实践

摘要&#xff1a; 随着信息化技术的飞速发展&#xff0c;智慧农业已成为推动农业现代化、提升农业生产效率的重要手段。本文介绍了一款基于uni-app框架和图鸟UI设计的智慧农业综合管控平台小程序&#xff0c;该平台整合了传感器控制、农业数据监测、设施管控、农业新闻传播以及…

Qt源码阅读笔记:初步了解QtCore模块目录结构

Qt框架是一个跨平台的C应用程序框架&#xff0c;广泛用于开发图形用户界面程序以及用于无界面后台操作的工具和服务器。它由多个模块组成&#xff0c;其中QtCore模块提供了核心的非GUI功能。 QtCore 提供了元对象系统&#xff0c;扩展了c 在元对象系统的基础上&#xff0c;qt又…

Redis—Hash数据类型及其常用命令详解

文章目录 Redis概述Hash类型Hash类型常用命令1 HSET&#xff1a;添加或者修改hash类型key的field的值2 HGET &#xff1a;获取一个hash类型key的field的值3 HMSET&#xff1a;批量添加多个hash类型key的field的值4 HMGET&#xff1a;批量获取多个hash类型key的field的值5 HGETA…

Windows11 24H2网络功能全新升级:全面支持Wi-Fi 7!

Windows11 24H2版本不仅推出了很多新功能&#xff0c;也全面升级了网络功能&#xff0c;全面支持Wi-Fi 7&#xff0c;带给用户最快的网速体验&#xff0c;还支持用户通过二维码分享Wi-Fi密码&#xff0c;操作更加便捷&#xff0c;也更新了SMB、LAPS和NDR协议。接下来跟随小编去…

MongoDB和AI 赋能行业应用:零售

欢迎阅读“MongoDB 和 AI 赋能行业应用”系列的第三篇。 本系列重点介绍 AI 应用于不同行业的关键用例&#xff0c;涵盖制造业和汽车行业、金融服务、零售、电信和媒体、保险以及医疗保健行业。 利用生成式 AI 技术&#xff08;Gen AI&#xff09;&#xff0c;零售商可以创造…

BGP路由反射器实验

实验内容&#xff1a; 通过本实验验证bgp路由反射器的规则 1. 从client收到的路由更新&#xff0c;反射到non-client和client&#xff0c;同时发送给EBGP邻居 2. 从non-client收到的路由更新&#xff0c;只反射到client&#xff0c;同时发送给EBGP邻居 3. 从EBGP邻居收到的路…

通信系统概述

1.定义 通信系统&#xff08;也称为通信网络&#xff09;是利用各种通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来&#xff0c;依靠网络软件及通信协议实现资源共享和信息传递的系统。 2.概述 随着通信技术和网络技术的不断发展&#xff…

ai绘画软件排行有哪些?介绍四款绘画软件

ai绘画软件排行有哪些&#xff1f;随着人工智能技术的飞速发展&#xff0c;AI绘画软件已经成为艺术创作领域的一股新势力。它们不仅极大地提高了绘画的效率&#xff0c;还为艺术家们带来了前所未有的创作灵感。在众多AI绘画软件中&#xff0c;聪明灵犀凭借其强大的功能和广泛的…

数据采集与预处理复习资料

目录 第一章 简答 1.简述Hadoop各个组件及其功能 2.Hadoop在大数据技术体系中的地位和作用&#xff08;来自文心一言&#xff09; 3.Hadoop 启动命令&#xff0c;停止命令 4.pig 加载HDFS 数据 5.数据采集的方法&#xff08;来自ppt&#xff09; 6.数据分析过程&#xf…