当前位置: 首页 > news >正文

Abstract Class抽象类

抽象类(Abstract Class)在面向对象编程中是一种特殊的类,它不能被实例化,即不能创建该类的对象。抽象类主要用于定义一组接口(即方法),这些方法的具体实现由子类来完成。抽象类通常用于表示一种抽象的概念,或者用于定义一组具有共同特征的方法,但具体实现可能因子类而异。

定义抽象类

在Java中,使用abstract关键字来定义一个抽象类。抽象类中可以包含抽象方法(使用abstract关键字声明的方法,没有方法体)和非抽象方法(即普通方法,有方法体)。如果一个类包含至少一个抽象方法,那么这个类也必须是抽象的,除非它是接口。

abstract class Animal {  // 抽象方法  abstract void eat();  // 非抽象方法  void sleep() {  System.out.println("Animal sleeps.");  }  
}

使用抽象类

1.继承抽象类

要使用抽象类,必须创建一个或多个子类来继承它,并实现其所有抽象方法。如果子类没有实现所有的抽象方法,那么子类也必须被声明为抽象类。

class Dog extends Animal {  // 实现从Animal类继承的抽象方法  @Override  void eat() {  System.out.println("Dog eats meat.");  }  
}  class Fish extends Animal {  // 实现从Animal类继承的抽象方法  @Override  void eat() {  System.out.println("Fish eats fish food.");  }  
}

2.通过子类实例调用方法

一旦子类实现了抽象类的所有抽象方法,就可以创建子类的实例,并通过这些实例来调用方法(包括从抽象类继承的非抽象方法和子类自己实现的方法)。

使用场景举例

形状(Shape)抽象类

假设我们需要设计一个图形库,其中包含多种形状,如圆形(Circle)、矩形(Rectangle)等。这些形状都有一些共同的行为,比如绘制(draw)和计算面积(calculateArea)。我们可以定义一个名为Shape的抽象类,其中包含drawcalculateArea两个抽象方法,然后让每种具体的形状类继承这个抽象类并实现这两个方法。

abstract class Shape {  // 抽象方法  abstract void draw();  abstract double calculateArea();  
}  class Circle extends Shape {  @Override  void draw() {  System.out.println("Drawing Circle");  }  @Override  double calculateArea() {  // 假设半径为5  return Math.PI * 5 * 5;  }  
}  class Rectangle extends Shape {  @Override  void draw() {  System.out.println("Drawing Rectangle");  }  @Override  double calculateArea() {  // 假设长和宽分别为10和5  return 10 * 5;  }  
}

动物(Animal)抽象类

另一个常见的使用场景是定义一个动物(Animal)抽象类,其中包含一些所有动物共有的行为,如吃(eat)和移动(move)。然后,我们可以创建不同的动物类(如猫Cat、狗Dog等)来继承这个抽象类,并实现这些行为的具体细节。

abstract class Animal {  // 抽象方法  abstract void eat();  void move() {  System.out.println("Animals can move");  }  
}  class Dog extends Animal {  @Override  void eat() {  System.out.println("Dog eats meat");  }  
}  class Cat extends Animal {  @Override  void eat() {  System.out.println("Cat eats fish");  }  
}

在这个例子中,move方法被定义为一个非抽象方法,并在Animal类中给出了具体的实现。这意味着所有继承自Animal类的子类都将自动获得move方法的行为,而无需在每个子类中重新实现它。这展示了抽象类如何促进代码的复用和一致性。

抽象类的特点

  • 抽象类不能被实例化。
  • 抽象类中可以包含抽象方法和非抽象方法。
  • 如果一个类包含抽象方法,那么这个类也必须是抽象的,除非它是接口。
  • 子类必须实现父类(抽象类)中的所有抽象方法,除非子类也是抽象的。
  • 抽象类通常用于定义一组接口,这些接口由子类来实现。

总结

抽象类在面向对象编程中扮演着重要的角色,它们提供了一种定义模板或接口的方式,让子类可以根据需要进行具体实现。

相关文章:

Abstract Class抽象类

抽象类(Abstract Class)在面向对象编程中是一种特殊的类,它不能被实例化,即不能创建该类的对象。抽象类主要用于定义一组接口(即方法),这些方法的具体实现由子类来完成。抽象类通常用于表示一种…...

webrtc ns 降噪之粉红噪声参数推导

webrtc中降噪中,前50帧需要进行简单噪声估计,使用白噪声和粉红噪声模型估算。 首先我们 复习 有色噪声(包含白噪声)的一般模型: S(f) 是频率 f 处的功率谱密度。f是频率。α 是一个频谱指数,通常在1左右。…...

IO进程线程8月21日

1&#xff0c;思维导图 2&#xff0c;登录 #ifndef __LOG_H__ #define __LOG_H__ #include<myhead.h> typedef struct {char name[20];char pwd[20]; }str;int regist();int login(); #endif#include"log.h" int login() {char a[20]"\n";str p,s;…...

Web安全:SqlMap工具

一、简介 sqlmap 是一款开源的渗透测试工具&#xff0c;可以自动化进行SQL注入的检测、利用&#xff0c;并能接管数据库服务器。它具有功能强大的检测引擎,为渗透测试人员提供了许多专业的功能并且可以进行组合&#xff0c;其中包括数据库指纹识别、数据读取和访问底层文件系统…...

用手机写一本电子书

第1步、进入Andi.cn网站 第2步、点击登录&#xff0c;注册用户 第3步、点击去创作&#xff0c;进入创作页面 第4步、点击右下角的小笔&#xff0c;写一篇文章 第5步、下翻&#xff0c;点击提交按钮 第6步、再写一篇文章 第7步、点击栏目设计 第8步、进入栏目设计&#xff0c;点…...

【网络编程】基于UDP的TFTP文件传输

1&#xff09;tftp协议概述 简单文件传输协议&#xff0c;适用于在网络上进行文件传输的一套标准协议&#xff0c;使用UDP传输 特点&#xff1a; 是应用层协议 基于UDP协议实现 数据传输模式 octet&#xff1a;二进制模式&#xff08;常用&#xff09; mail&#xff1a;已经不再…...

Vue 3 + Pinia 实现网页刷新功能

概述 在现代 Web 开发中&#xff0c;保持用户界面的动态性和响应性至关重要。当用户触发某些操作时&#xff0c;例如点击按钮或者完成表单提交&#xff0c;我们往往需要刷新页面的一部分来展示最新的数据。本文将介绍如何使用 Vue 3 和 Pinia 来实现这一功能。 技术栈 Vue 3…...

DVWA综合靶场漏洞讲解

目录 综合靶场漏洞讲解 Brute Force Low Medium High Command Injection Low Medium High File Inclusion Low,Medium,High File Upload Low Medium High SQL Injection Low Medium High SQL Injection (Blind) Low Medium High XSS&#xff08;DOM&am…...

实现Bezier样条曲线

1.给出n1 个控制点pk(xk,yk,zk),这里k可取值0-n,多项式函数公式如下 获取的单个点的代码 void zmBezier::getPoint(float u, double p[3]) {int n m_count - 1;double x 0, y 0, z 0;for(int k 0; k < n; k){x m_ctrlPoints[k][0] * BEZ_k_n(n, k, u);y m_ctrlPoin…...

MySQL中的EXPLAIN的详解

一、介绍 官网介绍&#xff1a; https://dev.mysql.com/doc/refman/5.7/en/explain-output.htmlhttps://dev.mysql.com/doc/refman/8.0/en/explain-output.htmlexplain&#xff08;执行计划&#xff09;&#xff0c;使用explain关键字可以模拟优化器执行sql查询语句&#xff…...

LearnOpenGL——SSAO学习笔记

LearnOpenGL——SSAO学习笔记 SSAO一、基本概念二、样本缓冲三、法向半球四、随机核心转动五、SSAO着色器六、环境遮蔽模糊七、应用SSAO遮蔽因子 SSAO 一、基本概念 环境光照是我们加入场景总体光照中的一个固定光照常量&#xff0c;它被用来模拟光的散射(Scattering)。散射应…...

[C语言]-基础知识点梳理-文件管理

前言 各位师傅们好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解文件管理的相关知识&#xff0c;也就是常见的 读取&#xff0c;删除一类的操作 文件 为什么要使用文件&#xff1f; 程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&…...

pcdn闲置带宽被动收入必看教程。第五讲:光猫更换和基础设置

PCDN闲置带宽被动收入必看教程 —— 第五讲&#xff1a;光猫更换和基础设置 为了从闲置带宽中获得被动收入&#xff0c;高效的网络设备至关重要。运营商提供的光猫通常能满足日常家用需求&#xff0c;但对于PCDN应用来说&#xff0c;它们可能不足以提供所需的高性能和稳定性。…...

工业数据采集网关简介-天拓四方

随着工业4.0和物联网&#xff08;IoT&#xff09;技术的深入发展&#xff0c;工业数据采集网关作为连接现场设备与上层管理系统的关键节点&#xff0c;其在智能工厂中的作用愈发凸显。本文将深入探讨工业数据采集网关的功能、特点、应用场景及其实操性&#xff0c;以期为读者提…...

Java 调整字符串,验证码生成

package text7;public class ZiFanz {public static void main(String[] args) {//1.定义两个字符串String strA "abcde";String strB "deabc";//2.abcde->bcdea->cdeab->deabc旋转字符串//旋转并比较boolean result cheak(strA, strB);System…...

【专题】全球商用服务机器人市场研究(2023)报告合集PDF分享(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p37366 近年来&#xff0c;随着人工智能、物联网和自动化技术的不断进步&#xff0c;商用服务机器人行业迅速崛起&#xff0c;展现出广阔的发展前景。从最初的实验室研发到如今的规模化应用&#xff0c;商用服务机器人已逐渐成为各行…...

SQL UA注入 (injection 第十八关)

简介 SQL注入&#xff08;SQL Injection&#xff09;是一种常见的网络攻击方式&#xff0c;通过向SQL查询中插入恶意的SQL代码&#xff0c;攻击者可以操控数据库&#xff0c;SQL注入是一种代码注入攻击&#xff0c;其中攻击者将恶意的SQL代码插入到应用程序的输入字段中&a…...

初阶数据结构之计数排序

非比较排序 计数排序 计数排序⼜称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应⽤。 操作步骤&#xff1a; 1&#xff09;统计相同元素出现次数 2&#xff09;根据统计的结果将序列回收到原来的序列中 #include "CountSort.h" void Count(int* arr, int n)…...

【开端】记一次诡异的接口排查过程

一、绪论 最近碰到这么一个情况&#xff0c;接口请求超时。前提是两台服务器间的网络是畅通的&#xff0c;端口也是通&#xff0c;应用代码也是通。意思是在应用上&#xff0c;接口没有任何报错&#xff0c;能正常返回数据。客户端到服务端接口也能通&#xff0c;但是接收不到服…...

jenkins最佳实践(二):Pipeline流水线部署springCloud微服务项目

各位小伙伴们大家好呀&#xff0c;我是小金&#xff0c;本篇文章我们将介绍如何使用Pipeline流水线部署我们自己的微服务项目&#xff0c;之前没怎么搞过部署相关的&#xff0c;以至于构建流水线的过程中中也遇到了很多自己以前没有考虑过的问题&#xff0c;特写此篇&#xff0…...

第2章 C语言基础知识

第2章 C语言基础知识 1.printf()函数 在控制台输出数据&#xff0c;需要使用输出函数&#xff0c;C语言常用的输出函数为printf()。 printf()函数为格式化输出函数&#xff0c;其功能是按照用户指定的格式将数据输出到屏幕上。 printf(“格式控制字符串”,[输出列表]); 格式控…...

鹭鹰优化算法SBOA优化RBF神经网络的扩散速度实现多数入多输出数据预测,可以更改数据集(MATLAB代码)

一、鹭鹰优化算法介绍 鹭鹰优化算法&#xff08;Secretary Bird Optimization Algorithm, SBOA&#xff09;是一种新型的元启发式算法&#xff0c;它于2024年4月由Youfa Fu等人提出&#xff0c;并发表在SCI人工智能二区顶刊《Artificial Intelligence Review》上。该算法的灵感…...

MySQL基础练习题48-连续出现的数字

目录 题目 准备数据 分析数据 题目 找出所有至少连续出现三次的数字。 准备数据 ## 创建库 create database db; use db;## 创建表 Create table If Not Exists Logs (id int, num int)## 向表中插入数据 Truncate table Logs insert into Logs (id, num) values (1, 1) i…...

webrtc学习笔记2

音视频采集和播放 打开摄像头并将画面显示到页面 1. 初始化button、video控件 2. 绑定“打开摄像头”响应事件onOpenCamera 3. 如果要打开摄像头则点击 “打开摄像头”按钮&#xff0c;以触发onOpenCamera事件的调用 4. 当触发onOpenCamera调用时 a. 设置约束条件&#xff0c…...

Simple RPC - 06 从零开始设计一个服务端(上)_注册中心的实现

文章目录 Pre核心内容服务端结构概述注册中心的实现1. 注册中心的架构2. 面向接口编程的设计3. 注册中心的接口设计4. SPI机制的应用 小结 Pre Simple RPC - 01 框架原理及总体架构初探 Simple RPC - 02 通用高性能序列化和反序列化设计与实现 Simple RPC - 03 借助Netty实现…...

【深度学习】基于Transformers的大模型推理框架

本文旨在介绍基于transformers的decoder-only语言模型的推理框架。与开源推理框架不同的是&#xff1a; 本框架没有利用额外的开源推理仓库&#xff0c;仅基于huggingface&#xff0c;transformers&#xff0c;pytorch等原生工具进行推理&#xff0c;适合新手学习大模型推理流…...

电脑监控怎样看回放视频?一键解锁电脑监控回放,守护安全不留死角!高效员工电脑监控,回放视频随时查!

你是否曾好奇那些键盘敲击背后的秘密&#xff1f;电脑监控不仅是守护企业安全的隐形盾牌&#xff0c;更是揭秘高效与合规的魔法镜&#xff01;一键解锁安企神监控回放&#xff0c;就像打开时间宝盒&#xff0c;让过去的工作瞬间跃然眼前。无论是精彩瞬间还是潜在风险&#xff0…...

【一起学Rust | 框架篇 | Tauri2.0框架】tauri中rust和前端的相互调用(rust调用前端)

文章目录 前言1. rust中调用前端2. 如何向前端发送事件3. 前端监听事件4. 执行js代码 前言 近期Tauri 2.0 rc版本发布&#xff0c;2.0版本迎来第一个稳定版本&#xff0c;同时官方文档也进行了更新。Tauri是一个使用Rust构建的框架&#xff0c;可以让你使用前端技术来构建桌面…...

deque容器

deque容器的基本概念 deque 是 C 标准库中的双端队列&#xff08;double-ended queue&#xff09;容器&#xff0c;提供了在两端进行插入和删除操作的功能。 deque与vector区别&#xff1a; vector对于头部的插入删除效率低&#xff0c;数据量越大效率越低。deque相对而言&am…...

Redis远程字典服务器(9)—— 类型补充

类型查询传送门&#xff1a;Understand Redis data types | Docs 一&#xff0c;stream类型 官方文档对于这个类型的解释是&#xff1a;streams是一个数据结构&#xff0c;它表现得像一个 “append-only log”&#xff0c;就是只能往后面添加&#xff0c;底层是字符串&#x…...

网站充值平台怎么做/百度秒收录技术最新

Gartner公司的分析师曾进行过调查&#xff0c;调查结果表明&#xff0c;就技术方面而言&#xff0c;亚洲CIO正将重点放在商务智能与商业分析&#xff0c;移动技术&#xff0c;以及云计算技术。 Gartner调查公司称&#xff0c;亚洲CIO心中商务与科技的优先顺序&#xff0c;在很大…...

网站上怎么做浮标/收录网

所有常见证书处理函数的实现 // 转换私钥编码格式BOOL ConvertKeyFormat(char *oldKey,int oldKeyLen,int oldFormat,char *newKeyFile,int newFormat){EVP_PKEY *keyNULL;BIO *bioutNULL;int ret;if ((bioutBIO_new_file(newKeyFile, "w")) NULL)return false;ke…...

信誉比较好的商家可做网站/优秀的营销策划案例

来自FallDream的博客&#xff0c;未经允许&#xff0c;请勿转载&#xff0c;谢谢。 艾登拥有一个计算机网络&#xff0c;每一台计算机都至少有着Intel Xeon E50 v40 40路GTX10800Titan的恐怖配置&#xff0c;并由无线网络直接或间接连接&#xff0c;这可以用一个无向连通图来表…...

如何在WordPress上传主题目录/长沙seo外包平台

三个功能实现非常相似&#xff0c;可以一并开发完 按钮显示中 thymeleaf可以支持security的一些标签 一、功能实现&#xff1a; 1.数据访问层 无论是置顶、删除、加精都要对帖子进行处理&#xff0c;因此先打开DiscussPostMapper接口&#xff0c;增加几个方法。 int updateT…...

清远网站制作/网站搭建外贸

真的很想吐槽一下李航老师后面的附录&#xff0c;看的我是云头雾里&#xff0c;上网查了很多资料才搞懂。 这篇文章主要讲解牛顿法和拟牛顿法一些算法思路上的由来&#xff0c;作为附录的补充&#xff0c;具体算法细节可以参考那本书1.牛顿法首先你需要知道的是牛顿法本身是一个…...

滨州五学一做考试网站/线上宣传推广方案

国民技术通用MCU N32G452系列芯片简介 产品简介 N32G452系列 (通用基本型) 采用32-bit ARM Cortex-M4内核&#xff0c;支持浮点运算和DSP指令&#xff0c;高达512KB 片内FLASH&#xff0c;144KB SRAM&#xff0c;多达18个数字通讯接口及4个模拟接口&#xff0c;内置10余种密码…...