Java中abstract关键字

news2024/11/27 2:19:18

文章目录

  • 由来
  • 语法格式
  • 使用说明
  • 应用举例

由来

  • 举例1:

随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类.
在这里插入图片描述

  • 举例2:
    我们声明一些几何图形类:圆、矩形、三角形类等,发现这些类都有共同特征:求面积、求周长。那么这些共同特征应该抽取到一个共同父类:几何图形类中。但是这些方法在父类中又无法给出具体的实现,而是应该交给子类各自具体实现。那么父类在声明这些方法时,就只有方法签名,没有方法体,我们把没有方法体的方法称为抽象方法。Java语法规定,包含抽象方法的类必须是抽象类

语法格式

  • 抽象类:被abstract修饰的类。
  • 抽象方法:被abstract修饰没有方法体的方法。
  • 抽象类的语法格式
[权限修饰符] abstract class 类名{
    
}
[权限修饰符] abstract class 类名 extends 父类{
    
}
  • 抽象方法的语法格式
[其他修饰符] abstract 返回值类型 方法名([形参列表]);

注意:抽象方法没有方法体
代码举例:

public abstract class Animal {
    public abstract void eat();
}
public class Cat extends Animal {
    public void eat (){
      	System.out.println("小猫吃鱼和猫粮"); 
    }
}
public class CatTest {
 	 public static void main(String[] args) {
        // 创建子类对象
        Cat c = new Cat(); 
       
        // 调用eat方法
        c.eat();
  	}
}

此时的方法重写,是子类对父类抽象方法的完成实现,我们将这种方法重写的操作,也叫做实现方法

使用说明

  1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

    理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

    抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。

  2. 抽象类中,也有构造方法,是供子类创建对象时,初始化父类成员变量使用的。

    理解:子类的构造方法中,有默认的super()或手动的super(实参列表),需要访问父类构造方法。

  3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

    理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。

  4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。

    理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。

注意事项:

  • 不能用abstract修饰变量、代码块、构造器;

  • 不能用abstract修饰私有方法、静态方法、final的方法、final的类。

应用举例

  • 举例1:
    在这里插入图片描述
    在航运公司系统中,Vehicle类需要定义两个方法分别计算运输工具的燃料效率行驶距离

**问题:**卡车(Truck)和驳船(RiverBarge)的燃料效率和行驶距离的计算方法完全不同。Vehicle类不能提供计算方法,但子类可以。

**解决方案:**Java允许类设计者指定:超类声明一个方法但不提供实现,该方法的实现由子类提供。这样的方法称为抽象方法。有一个或更多抽象方法的类称为抽象类。

//Vehicle是一个抽象类,有两个抽象方法。
public abstract class Vehicle{
	public abstract double calcFuelEfficiency();	//计算燃料效率的抽象方法
	public abstract double calcTripDistance();	//计算行驶距离的抽象方法
}
public class Truck extends Vehicle{
	public double calcFuelEfficiency( )   { //写出计算卡车的燃料效率的具体方法   }
	public double calcTripDistance( )    {  //写出计算卡车行驶距离的具体方法   }
}
public class RiverBarge extends Vehicle{
	 public double calcFuelEfficiency( ) { //写出计算驳船的燃料效率的具体方法  }
	 public double calcTripDistance( )  {  //写出计算驳船行驶距离的具体方法}
}
  • 举例二:

抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。
解决的问题

  • 当功能内部一部分实现是确定的,另一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。

  • 换句话说,在软件开发中实现一个算法时,整体步骤很固定、通用,这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽象出来,供不同子类实现。这就是一种模板模式。

类比举例:英语六级模板
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字赋能,你见过哪些科技感爆棚的VR数字展厅呢?

随着科技的不断进步,线上展厅作为一种新型的展示方式,在社会层面得到了广泛的认可和应用,VR数字展厅带给观众不一样的视觉震撼感,大大提升了品牌的价值。 传统的功能性展馆或是展厅千篇一律,缺乏品牌特色以及趣味性&am…

springboot之配置文件加载

springboot启动流程参考。Springboot总结。本内容主要解析里面的配置文件的加载过程。 springboot资源加载 入口。SpringApplication#run 我们知道,run方法是构建容器的过程。里面有一个方法:prepareEnvironment。用于构建环境组件Environment&#xf…

【ArcGIS Pro二次开发】(48):三调土地利用现状分类面积汇总统计

之前做了一个三调三大类面积统计,有小伙伴反映太粗糙,想要一个完整的地类面积汇总表。 【ArcGIS Pro二次开发】(35):三调三大类面积统计 本质上并没有多少难度,之前也做过类似的用地用海汇总表,于是拿出来改一改就好了…

3D开发工具HOOPS 2023 SP2更新:增加了SOLIDWORKS贴花支持!

HOOPS SDK是全球领先开发商TechSoft 3D旗下的原生产品,专注于Web端、桌面端、移动端3D工程应用程序的开发。长期以来,HOOPS通过卓越的3D技术,帮助全球600多家知名客户推动3D软件创新,这些客户包括SolidWorks、SIEMENS、Oracle、Ar…

几款好用软件,嗐,朋友推荐的,真香

1、git加速 官网:https://steampp.net/ 2、gif 截图 官网:https://www.screentogif.com/

scss 预处理器自定义ui框架(bem架构)

BEM架构 bem架构 它是一种css架构 oocss 实现的一种 (面向对象css) ,BEM实际上是block、element、modifier的缩写,分别为块层、元素层、修饰符层,element UI 也使用的是这种架构 BEM 命名约定的模式是: …

kaggle,球员接触检测

比赛链接 比赛目标 检测球员在NFL橄榄球比赛中所经历的外部接触。你将使用视频和球员跟踪数据来识别与接触的时刻,以帮助提高球员的安全。 评价指标 马修斯相关系数(Matthews Correlation Coefficient,简称MCC)是一种常用的二…

图论算法笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 第12章 最短路径算法12-1 有权图的最短路径问题最短路径问题-路径规划单源最短路径带权图的最短路径和无权图的最短路径带权图的最短路径算法-Dijkstra算法 12-2 Di…

检测到目标Strict-Transport-Security响应头缺失

详细描述 Web 服务器对于 HTTP 请求的响应头中缺少 Strict-Transport-Security,这将导致浏览器提供的安全特性失效。 当 Web 服务器的 HTTP 头中包含 Strict-Transport-Security 头时,浏览器将持续使用 HTTPS 来访问 Web 站点,可以用来对抗协…

Echart柱形图条纹设置

代码内容: option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: bar},{data: [20, 40, 90, 40, 30, 70, 120],type: bar},{data: [140, 230, 120, 50, 30, 150, 120]…

利用远程调试获取Chromium内核浏览器Cookie

前言 本文将介绍不依靠DPAPI的方式获取Chromium内核浏览器Cookie 远程调试 首先我们以edge为例。edge浏览器是基于Chromium的,而Chromium是可以开启远程调试的,开启远程调试的官方文档如下: https://blog.chromium.org/2011/05/remote-deb…

8.带你入门matlab 数据统计与分析——区间参数估计 均匀分布(matlab 程序 )

1.简述 本文将涉及到数理统计的最后一个模块——参数估计,后续将更新的模块是多项式计算、数据插值和曲线拟合。 在讲述使用matlab来实现参数估计之前,有必要去了解一些基本原理。 1.离散型随机变量的极大似然估计法: (1) 似然函数 若X为离散型, 似然函数…

NFTScan 与 Decert 达成合作伙伴,双方在 NFT 数据方面展开合作

近日,NFT 数据基础设施 NFTScan 与 Decert 达成合作伙伴关系,双方在多链 NFT 数据层面展开合作。在 Decert 产品中,由 NFTScan 为其提供专业的多链 NFT 数据支持,为用户带来优质的 NFT 搜索查询等相关交互功能,提升用户…

SQL 上升的温度

197 上升的温度 SQL架构 表: Weather ---------------------- | Column Name | Type | ---------------------- | id | int | | recordDate | date | | temperature | int | ---------------------- id 是这个表的主键 该表包含特定日期的温度信息 编写一个 SQL …

MySQL主从复制(一主一从)

文章目录 MySQL主从复制(一主一从)什么是主从复制主从复制的原理主从复制的优点准备工作配置主数据库Master配置从数据库Slave测试 MySQL主从复制(一主一从) 什么是主从复制 MySQL主从复制是指数据可以从一个MySQL数据库服务器的主节点复制到一个或多个从节点。主节点记录了所…

CAP原则的一致性、可用性、分区容错性

2000年,Eric Brewer在ACM PODC分布式计算原理专题讨论会上首次提出CAP原则。后来,麻省理工学院的两位科学家(赛斯吉尔伯特和南希林奇)证明了CAP原则的正确性。目前,CAP原则被大型公司广泛采纳,例如Amazon公司。 CAP原则又称CAP定…

Unity Obfuscator

官方仓库 学习日期:2023-07-13(防止后续仓库特性或功能更新无对比时间) 目标:本文介绍使用此github库,混淆unity项目的代码,在ILSpy中无法正确反编译。 一、说明 官方说明 配置界面 Features: ControlFlow…

Web 前端 Day 6

函数 <script>// parseInt(200px)// getSum(20, 30) ​ ​function sayHi() {console.log(hello,function!)} ​// 函数必须进行调用&#xff0c;才会执行sayHi()let age 21 ​// 函数要有返回值&#xff0c;一定要添加return关键字&#xff0c;否则返回值为undefinedfu…

五子棋小游戏 java版(代码+详细注释)

游戏展示 这周闲来无事&#xff0c;再来写个五子棋小游戏。基本功能都实现了&#xff0c;包括人人对战、人机对战。界面布局和功能都写的还行&#xff0c;没做到很优秀&#xff0c;但也不算差。如有需要&#xff0c;做个java初学者的课程设计或者自己写着玩玩也都是不错的&…

关于酒吧的八个大实话

1、酒吧风格定位取决于你酒吧面向的客户群体 2、酒吧要根据所在地区人流量开酒吧&#xff0c;大酒吧开在人流量少的可能死于客流量太小&#xff0c;合理的酒吧规模才能生存。3、酒吧客群不能只面向亲朋好友&#xff0c;再好的朋友也不可能天天来照顾你的生意。4、酒吧注重酒吧…