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.run3、面向抽象编程
定义了抽象类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:文件是 Windows 操作系统的动态链接库文件。.SO 文件是 Unix、Linux 和其他类 Unix 系统的共享库文件。 2. Go编译DLL/SO 注意 export后面导出的方法名一定要大写。 package main/* #include <stdlib.h>…...
 
css浮动
标准流:也叫文档流,指的是标签在页面中默认的排布规则。 浮动:让块级元素水平排列(float:left/right;)。 特点:浮动后的盒子顶对齐; 浮动后的盒子具备行内块的特点; 浮动后的元素脱…...
小程序怎么开发?怎么开发自己的小程序
一、明确需求与定位 在开发小程序之前,需要明确需求. 首先,明确小程序的定位非常重要。我们需要确定小程序是为了提供便捷的购物体验还是特定领域的服务。明确定位可以帮助我们更好地设计和优化小程序的功能,以符合用户的期望和需求。 其次…...
 
Unity(第十八部)物理力学,碰撞,触发、关节和材质
1、重力 刚体组件 英文中文描述RigidBody刚体组件physics->rigidbody ,刚体组件使一个物体有了质量,重力等。,use gravity 勾选后,物体才会受到重力,会自动下落,取消勾选就不会。,…...
 
内网搭建mysql8.0并搭建主从复制详细教程!!!
一、安装mysql 1.1 mysql下载链接: 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 解释器小记
解释器的结果通常通过上述表格展示: 1. select_type 表示查询的类型 simple: 表示简单的选择查询,没有子查询或连接操作 primary:表示主查询,通常是最外层的查询 subquery :表示子查询,在主查询中嵌套的查询 derived: 表示派…...
 
具身智能计算系统,机器人时代的 Android | 新程序员
【导读】具身智能作为一种新兴的研究视角和方法论,正在刷新我们对智能本质及其发展的理解:传统的 AI 模型往往将智能视为一种独立于实体存在的抽象能力,而具身智能则主张智能是实体与其环境持续互动的结果。 本文深度剖析了具身智能计算系统…...
 
win11开启IPV6并手动设置地址
win11开启IPV6并手动设置地址 ipv6手动设置 假设你想要配置的IPv6地址是2001:0db8:85a3:0000:0000:8a2e:0370:7334,子网前缀长度为64位,并且默认网关是2001:0db8:85a3::1。 手动配置IPv6地址的示例步骤(Windows操作系统)&#x…...
 
WPF中如何设置自定义控件
1.圆角按钮的设置: 众所周知在WPF中自带有提示信息,当我问创建Button时,点击空格出现如下可选设置 带有小扳手🔧图标为相应的属性,如果Button有CornerRadius(角半径)属性就能够直接设置Button实…...
 
【Leetcode每日一题】二分查找 - 寻找旋转排序数组中的最小值(难度⭐⭐)(22)
1. 题目解析 Leetcode链接:153. 寻找旋转排序数组中的最小值 这个题目乍一看很长很复杂,又是旋转数组又是最小值的 但是仔细想想,结合题目给的示例,不难看出可以用二分的方法来解决 核心在于找到给定数组里面的最小值 2. 算法原…...
 
QT C++实战:实现用户登录页面及多个界面跳转
主要思路 一个登录界面,以管理员Or普通用户登录管理员:一个管理员的操作界面,可以把数据录入到数据库中。有返回登陆按钮,可以选择重新登陆(管理员Or普通用户普通用户:一个主界面,负责展示视频…...
 
我的世界游戏服务器平台推荐哪里找?
我的世界服务器可以在多个平台上租赁,以下是一些推荐的游戏服务器平台。 1.玩家可以通过互联网上的一些平台租用游戏服务器。其中,国内大厂平台有阿里云、腾讯云、华为云等。这些平台提供了丰富的服务器配置和带宽选择,玩家可以根据自己的需求…...
 
用于制作耳机壳的倒模专用UV树脂有什么特点?
制作耳机壳的UV树脂耳机壳UV胶具有以下特点: 快速固化:UV树脂可以在紫外线的照射下迅速固化,大大缩短了制作时间。高硬度与高耐磨性:UV树脂具有较高的硬度和耐磨性,能够提供良好的保护效果。透明度高: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.编写头文件(声明变量) clas…...
 
golang学习7,glang的web的restful接口结构体传参
接口: //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、运行模型 (1)首先会下载data文件库 (2)完成之后会开始训练模型(10次) 3、 训练好之后,进入命令集 4、输入命令:python -m tensorboard.ma…...
 
逆向案例三:动态xhr包中AES解密的一般步骤,以精灵数据为例
补充知识:进行AES解密需要知道四个关键字,即密钥key,向量iv,模式mode,填充方式pad 一般网页AES都是16位的,m3u8视频加密一般是AES-128格式 网页链接:https://www.jinglingshuju.com/articles 进行抓包结果返回的是密文: 一般思…...
 
超越CPU和GPU:引领AI进化的LPU
什么是CPU CPU(Central Processing Unit)是由数十亿个晶体管构成的,可以拥有多个处理核心,通常被称为计算机的“大脑”。它对所有现代计算系统至关重要,因为它执行计算机和操作系统所需的命令和进程。CPU在决定程序运…...
 
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
 
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
 
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
 
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
 
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
