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

java抽象方法和抽象类

1、抽象方法

        如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法

class Person {    // 定义抽象方法public abstract void run();
}

        把一个方法声明为abstract,表示它是一个抽象方法,本身没有实现任何方法语句。因为这个抽象方法本身是无法执行的,所以Person类无法被实例化。并且编译器会报错无法编译Person类,因为它包含抽象方法。

        必须把Person类本身也声明为abstract,才能正确编译它,如:

// 抽象方法必须定义在抽象类中abstract class Person {public abstract void run(); }

2、抽象类

        如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。因为无法执行抽象方法,因此这个类也必须申明为抽象类(abstract class)。

         使用abstract修饰的类就是抽象类,抽象类无法实例化。

// 编译报错,Person不能被实例化
Person p = new Person(); 

        抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。抽象方法实际上相当于定义了"规范"。

abstract class Person {  // 定义抽象类Personpublic abstract void run();   // 抽象方法run()
}class Student extends Person {   // 继承抽象类Person@Overridepublic void run() {   // 必须覆写父类run()方法,否则会报错System.out.println("Student.run");}
}Student p = new Student();
p.run();       // 运行结果:Student.run

3、面向抽象编程

        定义了抽象类Person,以及具体的Student子类的时候,可以通过抽象类Person类型去引用具体的子类实例。

        这种引用抽象类的好处在于,对其进行方法调用,并不关心Person类型变量的具体子类型。

// Person类型的引用变量s指向Student实例。
Person s = new Student();
s.run();

        这种尽量引用高层类型,避免引用实际子类型的方式,称之为面向抽象编程。

        面向抽象编程本质:

        (1)上层代码只定义规范

        (2)不需要子类就可以实现业务逻辑

        (3)具体的业务逻辑由不同的子类实现,调用者并不关心

4、总结 

        通过abstract定义的方法是抽象方法,它只定义没有实现。抽象方法定义了子类必须实现的接口规范。

        定义了抽象方法的class必须被定义为抽象方法,从抽象类继承的子类必须实现抽象方法。

        如果不实现抽象方法,则该子类仍是一个抽象类。

        面向抽象编程使得调用者只关心抽象方法的定义,不关心子类的具体实现。        

相关文章:

java抽象方法和抽象类

1、抽象方法 如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法。 class Person { // 定义抽象方法public abstract void run(); } 把一个方法声明为a…...

echarts鼠标向右/向左绘制实现放大/还原

echarts toolbox 的datazoom提供了绘制放大的功能,但通过鼠标绘制只能进行放大 应需求放大与还原都通过鼠标行为实现,增加从右往左绘制时还原放大结果 demo 结果 重写datazoom的原型方法实现绘制事件的拦截 const comp myChart._model.getComponent(to…...

Go编译DLL与SO

1. 简介 将Go编译成DLL/SO供其他语言调用。 .DLL&#xff1a;文件是 Windows 操作系统的动态链接库文件。.SO 文件是 Unix、Linux 和其他类 Unix 系统的共享库文件。 2. Go编译DLL/SO 注意 export后面导出的方法名一定要大写。 package main/* #include <stdlib.h>…...

css浮动

标准流&#xff1a;也叫文档流&#xff0c;指的是标签在页面中默认的排布规则。 浮动&#xff1a;让块级元素水平排列&#xff08;float:left/right;&#xff09;。 特点&#xff1a;浮动后的盒子顶对齐&#xff1b; 浮动后的盒子具备行内块的特点&#xff1b; 浮动后的元素脱…...

小程序怎么开发?怎么开发自己的小程序

一、明确需求与定位 在开发小程序之前&#xff0c;需要明确需求. 首先&#xff0c;明确小程序的定位非常重要。我们需要确定小程序是为了提供便捷的购物体验还是特定领域的服务。明确定位可以帮助我们更好地设计和优化小程序的功能&#xff0c;以符合用户的期望和需求。 其次…...

Unity(第十八部)物理力学,碰撞,触发、关节和材质

1、重力 刚体组件 英文中文描述RigidBody刚体组件physics->rigidbody &#xff0c;刚体组件使一个物体有了质量&#xff0c;重力等。&#xff0c;use gravity 勾选后&#xff0c;物体才会受到重力&#xff0c;会自动下落&#xff0c;取消勾选就不会。&#xff0c;&#xf…...

内网搭建mysql8.0并搭建主从复制详细教程!!!

一、安装mysql 1.1 mysql下载链接&#xff1a; https://downloads.mysql.com/archives/community/ 1.2 解压包并创建相应的数据目录 tar -xvf mysql-8.2.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local cd /usr/local/ mv mysql-8.2.0-linux-glibc2.28-x86_64/ mysql mkdir…...

MYSQL 解释器小记

解释器的结果通常通过上述表格展示&#xff1a; 1. select_type 表示查询的类型 simple: 表示简单的选择查询&#xff0c;没有子查询或连接操作 primary:表示主查询&#xff0c;通常是最外层的查询 subquery :表示子查询&#xff0c;在主查询中嵌套的查询 derived: 表示派…...

具身智能计算系统,机器人时代的 Android | 新程序员

【导读】具身智能作为一种新兴的研究视角和方法论&#xff0c;正在刷新我们对智能本质及其发展的理解&#xff1a;传统的 AI 模型往往将智能视为一种独立于实体存在的抽象能力&#xff0c;而具身智能则主张智能是实体与其环境持续互动的结果。 本文深度剖析了具身智能计算系统…...

win11开启IPV6并手动设置地址

win11开启IPV6并手动设置地址 ipv6手动设置 假设你想要配置的IPv6地址是2001:0db8:85a3:0000:0000:8a2e:0370:7334&#xff0c;子网前缀长度为64位&#xff0c;并且默认网关是2001:0db8:85a3::1。 手动配置IPv6地址的示例步骤&#xff08;Windows操作系统&#xff09;&#x…...

WPF中如何设置自定义控件

1.圆角按钮的设置&#xff1a; 众所周知在WPF中自带有提示信息&#xff0c;当我问创建Button时&#xff0c;点击空格出现如下可选设置 带有小扳手&#x1f527;图标为相应的属性&#xff0c;如果Button有CornerRadius&#xff08;角半径&#xff09;属性就能够直接设置Button实…...

【Leetcode每日一题】二分查找 - 寻找旋转排序数组中的最小值(难度⭐⭐)(22)

1. 题目解析 Leetcode链接&#xff1a;153. 寻找旋转排序数组中的最小值 这个题目乍一看很长很复杂&#xff0c;又是旋转数组又是最小值的 但是仔细想想&#xff0c;结合题目给的示例&#xff0c;不难看出可以用二分的方法来解决 核心在于找到给定数组里面的最小值 2. 算法原…...

QT C++实战:实现用户登录页面及多个界面跳转

主要思路 一个登录界面&#xff0c;以管理员Or普通用户登录管理员&#xff1a;一个管理员的操作界面&#xff0c;可以把数据录入到数据库中。有返回登陆按钮&#xff0c;可以选择重新登陆&#xff08;管理员Or普通用户普通用户&#xff1a;一个主界面&#xff0c;负责展示视频…...

我的世界游戏服务器平台推荐哪里找?

我的世界服务器可以在多个平台上租赁&#xff0c;以下是一些推荐的游戏服务器平台。 1.玩家可以通过互联网上的一些平台租用游戏服务器。其中&#xff0c;国内大厂平台有阿里云、腾讯云、华为云等。这些平台提供了丰富的服务器配置和带宽选择&#xff0c;玩家可以根据自己的需求…...

用于制作耳机壳的倒模专用UV树脂有什么特点?

制作耳机壳的UV树脂耳机壳UV胶具有以下特点&#xff1a; 快速固化&#xff1a;UV树脂可以在紫外线的照射下迅速固化&#xff0c;大大缩短了制作时间。高硬度与高耐磨性&#xff1a;UV树脂具有较高的硬度和耐磨性&#xff0c;能够提供良好的保护效果。透明度高&#xff1a;UV树…...

将c、c++变为python

1.编写cpp文件 #include "pycpp.h" #include <iostream>using namespace std;PyCpp::PyCpp(){}void PyCpp::sayHello(int a){cout << "Hello Python, I am C."<<a << endl; }2.编写头文件&#xff08;声明变量&#xff09; clas…...

golang学习7,glang的web的restful接口结构体传参

接口&#xff1a; //POST请求 返回json 接口传参json r.POST("/postJson", controller.PostUserInfo) 1.定义结构体 //定义结构体 type Search struct {Id intName string }2.结构体传参 //结构体传参 func PostUserInfo(c *gin.Context) {search : &Searc…...

python模型训练

目录 1、新建模型 train_model.py 2、运行模型 &#xff08;1&#xff09;首先会下载data文件库 &#xff08;2&#xff09;完成之后会开始训练模型&#xff08;10次&#xff09; 3、 训练好之后&#xff0c;进入命令集 4、输入命令&#xff1a;python -m tensorboard.ma…...

逆向案例三:动态xhr包中AES解密的一般步骤,以精灵数据为例

补充知识&#xff1a;进行AES解密需要知道四个关键字&#xff0c;即密钥key,向量iv,模式mode,填充方式pad 一般网页AES都是16位的&#xff0c;m3u8视频加密一般是AES-128格式 网页链接:https://www.jinglingshuju.com/articles 进行抓包结果返回的是密文&#xff1a; 一般思…...

超越CPU和GPU:引领AI进化的LPU

什么是CPU CPU&#xff08;Central Processing Unit&#xff09;是由数十亿个晶体管构成的&#xff0c;可以拥有多个处理核心&#xff0c;通常被称为计算机的“大脑”。它对所有现代计算系统至关重要&#xff0c;因为它执行计算机和操作系统所需的命令和进程。CPU在决定程序运…...

避开S32K144 GPIO的5个常见坑:从引脚复用、中断配置到数字滤波

避开S32K144 GPIO的5个常见坑&#xff1a;从引脚复用、中断配置到数字滤波 在嵌入式开发中&#xff0c;GPIO&#xff08;通用输入输出&#xff09;接口看似简单&#xff0c;却隐藏着许多容易忽视的细节。尤其是对于NXP的S32K144系列MCU&#xff0c;其GPIO模块与PORT模块的协同工…...

丹青幻境在社交媒体运营中的应用:小红书古风笔记配图自动化生成方案

丹青幻境在社交媒体运营中的应用&#xff1a;小红书古风笔记配图自动化生成方案 1. 引言&#xff1a;古风内容创作的痛点与机遇 在小红书这样的视觉社交平台上&#xff0c;古风内容正成为一股不可忽视的潮流。从汉服穿搭到国风美妆&#xff0c;从传统手工艺到古典文学&#x…...

LangChain入门指南:轻松掌握大模型应用开发,收藏必备技能!

LangChain是一个开源的大语言模型&#xff08;LLM&#xff09;应用开发框架&#xff0c;通过模块化抽象与标准化接口&#xff0c;简化复杂AI工作流的构建过程。本文介绍了LangChain的核心概念、架构、主要组件以及使用场景&#xff0c;并通过实例展示了如何使用LangChain进行大…...

AI绘画进阶技巧:从出图到商用,避开版权坑与同质化的核心方法

如何提升AI绘画作品质量选择适合的模型和工具&#xff1a;Stable Diffusion、MidJourney等工具各有特点&#xff0c;针对不同风格需求选择合适模型。例如&#xff0c;写实风格可使用RealESRGAN增强细节&#xff0c;动漫风格可尝试NovelAI模型。优化提示词&#xff08;Prompt&am…...

一文讲透扩散模型采样器:DDPM、DDIM、Euler、Heun、DPM-Solver、UniPC、LCM 全面对比

下面我把范围先说清楚: 你问的“类似 Euler、Heun、DPM-Solver 这种定位的求解器”,我这里按扩散模型 / Flow Matching 推理阶段的通用采样器(scheduler / solver)来整理,而不把任务专用或模型专用的东西混进来,比如 RePaint、DDIM inverse、VQDiffusion、CogVideoX/Hel…...

避坑指南:Xilinx Aurora IP核多核例化时,GT_RESET信号必须保持10个时钟周期的原因

Xilinx Aurora IP核多核例化中GT_RESET信号的时序陷阱与实战解决方案 在FPGA高速串行通信领域&#xff0c;Xilinx的Aurora 8B/10B协议IP核因其简洁高效的特性&#xff0c;成为多通道数据交互的首选方案。但当工程师尝试在单个QUAD中例化多个Aurora IP核以实现高密度链路时&…...

SpringBoot 中 AOP 实现日志记录(操作日志)

上一篇我们吃透了 Spring AOP 的四大核心概念&#xff08;切面、通知、切点、织入&#xff09;&#xff0c;很多同学留言说&#xff1a;“概念懂了&#xff0c;但还是不知道怎么落地”。今天就来讲讲Spring AOP最实用的实战场景——用 SpringBoot AOP 实现操作日志记录。操作日…...

Oracle Live SQL隐藏功能盘点:从Quick SQL速写到Code Library淘金

Oracle Live SQL隐藏功能实战指南&#xff1a;解锁高效开发与学习新姿势 在Oracle生态系统中&#xff0c;Live SQL常被简单地视为一个在线SQL练习工具&#xff0c;但它的真实价值远不止于此。作为一名长期使用该平台的技术顾问&#xff0c;我发现许多开发者仅停留在基础的SQL W…...

如何在5分钟内将SDS动态字符串库集成到您的C项目中:完整配置指南

如何在5分钟内将SDS动态字符串库集成到您的C项目中&#xff1a;完整配置指南 【免费下载链接】sds Simple Dynamic Strings library for C 项目地址: https://gitcode.com/gh_mirrors/sds/sds SDS&#xff08;Simple Dynamic Strings&#xff09;是一个为C语言设计的高效…...

【仅限72小时】SITS2026技术委员会内部共识:2026年起,无可靠性证明的AIAgent禁止接入核心业务系统

第一章&#xff1a;SITS2026总结&#xff1a;构建可靠AIAgent的关键要素 2026奇点智能技术大会(https://ml-summit.org) 可靠性源于可验证的架构设计 在SITS2026中&#xff0c;工业级AI Agent的可靠性不再依赖黑盒调优&#xff0c;而建立在模块化、可观测、可回滚的架构范式之…...