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

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

  • 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💖点点关注,收藏不迷路💖

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

文章目录 一、Redis概述List类型1 LPUSH:将一个或多个值插入到列表头部2 RPUSH:将一个或多个值插入到列表尾部3 LPOP:从列表头部弹出并移除一个或多个元素4 RPOP:从列表尾部弹出一个或多个元素5 LLEN:获取 Redis 列表的长度6 LRANGE:获取 Redis 列表中指定范围内的元…

制作WIFI二维码,实现一键扫描连接WIFI

在现代社会,Wi-Fi已成为我们日常生活中不可或缺的一部分。无论是在家庭、办公室还是公共场所,我们都希望能够快速方便地连接到Wi-Fi网络。下面小编就来和大家分享通过制作WIFI二维码,来实现一键扫描就可以连接WIFI的方法。连接WIFI不用在告诉…

【React】AntD组件---极客园--01.项目前置准备

项目搭建 基于CRA创建项目 CRA是一个底层基于webpack快速创建React项目的脚手架工具 # 使用npx创建项目 npx create-react-app react-jike# 进入到项 cd react-jike# 启动项目 npm start调整项目目录结构 -src-apis 项目接口函数-assets 项目资源文件&…

scratch编程04-使用扩展中的画笔绘制不规则的花瓣

目录 1,添加画笔模块 2,绘制一片花瓣 1)在哪个位置绘制及画笔的朝向是往左还是往右 2)绘制花瓣时,画笔的旋转角度该怎么设置才能够让绘制出来的花瓣有弧度,而不是一条线 3)怎么才能够让另…

AGI 之 【Hugging Face】 的[ 简单介绍 ] [ 基础环境搭建 ] 的简单整理

AGI 之 【Hugging Face】 的[ 简单介绍 ] [ 基础环境搭建 ] 的简单整理 目录 AGI 之 【Hugging Face】 的[ 简单介绍 ] [ 基础环境搭建 ] 的简单整理 一、简单介绍 二、Hugging Face 三、环境搭建 python 环境的搭建 Pycharm 环境搭建 1、下载 Pycharm 安装包 2、安装 …

SAP_ABAP模块-记录第三方通过Webservice调用SAP接口时的问题

一、业务背景: 最近SAP有个货物移动的接口需要优化,之前与第三方销售管理平台对接,一直都没有问题的,但是现在SAP这边优化后,然后对方平台的开发同事说,调用不成功,报错了,最开始一直…

Linux测试服务器端口是否打开

前言 服务器端口在计算机网络通信中扮演着至关重要的角色,其作用可以归纳如下: 区分不同的应用程序或服务: 服务器端口用于标识和定位不同应用程序或服务在服务器上的通信入口。 通过不同的端口号,服务器可以同时运行多个应用程…

基于单电阻采样的电流重构

1. 单电阻采样电流重构原理 图1(a)所示是电压型三相逆变器,定义三相开 关信号为 Sa 、Sb 、Sc 。当 Sa = 1 表示A相上桥臂导 通,下桥臂关断;Sa = 0 表示相反。三相逆变器采用 SVPWM调制方式控制,有8种开关工作状态,包括 6个非零电压矢量V1 ~ V6 和2个零电压矢量V0 、V7…

连接和断开信号演示之二

代码; #include <gtk-2.0/gtk/gtk.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <glib-2.0/glib.h> #include <stdio.h>void button_press(GtkEventBox *ebox,GdkEventButton *event,GtkLabel *label) {const char *citem;switch(event->type…

ESU-EM213热作模具钢粉末推动3D打印在压铸行业应用

模具的种类繁多&#xff0c;依据制造方式和产品特性&#xff0c;可以分为注塑模具、压铸模具、冲压模具等多种类型。其中&#xff0c;压铸模具因工况恶劣&#xff0c;特别是在铝压铸过程中&#xff0c;模具需承受高温&#xff08;50-300℃&#xff09;及高压高速金属液的冲击&a…

JMeter的基本概念

一、主流测试工具 1&#xff0c;Loadrunner HP Loadrunner是一种工业级标准性能测试负载工具&#xff0c;可以模拟上万用户实施测试&#xff0c;并在测试时可实时检测应用服务器及服务器硬件各种数据&#xff0c;来确认和查找存在的瓶颈 支持多协议:Web(HTTP/HTML)、Windows…

修改SpringBoot项目配置文件

方法一&#xff1a; 修改application.properties文件 //示例 server.port9090 server.servlet.context-path/start 重启后效果&#xff1a; 方法二&#xff1a;&#xff08;推荐&#xff09; 修改application.yml文件&#xff08;文件后缀亦可为.yaml&#xff09;&#xff…

MLP多层感知器:AI人工智能神经网络的基石

MLP 是指多层感知器&#xff08;Multilayer Perceptron&#xff09;&#xff0c;是一种基础人工神经网络模型&#xff08;ANN&#xff0c;Artificial Neural Network&#xff09;。MLP 的核心是通过深度学习从大量数据中学习特征和模式&#xff0c;并训练参数。通过参数与激活函…

Java——IO流(一)-(6/8):字节流-FileInputStream 每次读取多个字节(示例演示)、一次读取完全部字节(方式一、方式二,注意事项)

目录 文件字节输入流&#xff1a;每次读取多个字节 实例演示 注意事项 文件字节输入流&#xff1a;一次读取完全部字节 方式一 方式二 注意事项 文件字节输入流&#xff1a;每次读取多个字节 用到之前介绍过的常用方法&#xff1a; 实例演示 需求&#xff1a;用每次读取…

Star、Star求Star

本章是介绍博主自己的一个小工具的。使用的PythonPyQt5开发的。顺带来求一波star&#x1f31f;&#x1f31f;&#xff01;&#xff01;&#xff01; 地址&#xff1a;https://gitee.com/qinganan_admin/PyCom Pycom是博主开发的串口工具&#xff0c;要是说对比其他串口工具&…

异步复位同步释放

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 参考代码 描述 题目描述&#xff1a; 请使用异步复位同步释放来将输入数据a存储到寄存器中&#xff0c;并画图说明异步复位同步释放的机制原理 信号示意图&#xff1a; clk为时钟 rst_n为低电平复位 d信号输入…

为何人类需重复学习与记忆?人工智能与人类认知机制的融合 —— 生物体AI

零、 AI 与人的认知背景知识 人作为一种生物智能体&#xff0c;学习和记忆的过程往往需要重复与实践。这是因为人的大脑并非一次性就能完美地吸收和储存信息&#xff0c;而是通过反复的认知加工&#xff0c;将短期记忆转化为长期记忆&#xff0c;并通过深度理解、归纳总结以及…

【GUI】LVGL无操作系统移植以及移植过程错误处理

目录 介绍 1. 删除源码 2. 导入lvgl到项目screen_mcu中 3. keil添加分组和头文件 4. 移植显示 5. 移植触摸 6. 添加测试案例 6.1. 测试按钮 6.2. 测试音乐界面 7. 提供时钟 错误处理 L6218E错误 出现花屏 屏幕颜色不对 内存分配 介绍 本文 主要介绍GD32移植…

qt经典界面框架

目的 其实就是一个简单的界面显示&#xff0c;是很常用的形式。 说起来简单也是简单&#xff0c;但当初&#xff0c;刚开始做时&#xff0c;感觉非常的复杂&#xff0c;不知如何下手。 现在感觉简单多了。 这个框架利用了QT的现成的MainWindow与QDockWidget&#xff0c;这样就…

福建聚鼎:装饰画现在做起来难吗

在当代社会&#xff0c;艺术创作已经成为很多人表达自我、追求美学生活的方式之一。装饰画作为家居装饰的重要元素&#xff0c;也受到了越来越多人的喜爱。但做一个优质的装饰画真的容易吗? 从技术层面讲&#xff0c;随着科技的发展&#xff0c;制作装饰画的手段和材料都比以往…