一分钟带你认清Java抽象类

abstrat——抽象,抽象类真的有像它的名字一样那么抽象吗?其实不然,它只是一个比较特殊的类别,我们只需要简单地认清它的作用就行,一起来看看吧~

抽象类的概念

首先我们要明确一个事情:在面向对象的概念中,所有的对象都是通过类来描绘的,但并不是所有的类都是用来描绘对象的,因此就有了我们抽象类的概念:**如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。**

  1. 圆形、三角形、正方形都继承了图形类;
  2. Shape类没有办法描述一个具体的形状,就是我们不知道接下来要描绘一个什么样的形状,所以我们把它设计为"抽象类"。

在打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都由 Shape 的各种子类的 draw 方法来完成的. 像这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法(abstract method), 包含抽象方法的类我们称为 抽象类(abstract class)

抽象类语法

在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用 给出具体的实现体。
public abstract class Shape {// 抽象方法:被abstract修饰的方法,没有方法体abstract public void draw();abstract void calcArea();// 抽象类也是类,也可以增加普通方法和属性public double getArea(){return area;}protected double area; // 面积}

抽象类特性

1. 抽象类不能直接实例化

<font style="color:rgb(0,0,0);">Shape shape </font><font style="color:rgb(152,26,26);">= </font><font style="color:rgb(119,0,136);">new </font><font style="color:rgb(0,0,0);">Shape</font><font style="color:rgb(51,51,51);">();</font>对于抽象类shape来说,编译器是会报错的。

  1. 抽象方法不能是private的
  2. 抽象方法不能被final和static修饰,因为抽象方法必须被子类重写
  3. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰。
// 矩形类public class Rect extends Shape {private double length;private double width;Rect(double length, double width){this.length = length;this.width = width;}public void draw(){System.out.println("矩形: length= "+length+" width= " + width);}public void calcArea(){area = length * width;}}public class Circle extends Shape{private double r;final private static double PI = 3.14;public Circle(double r){this.r = r;}public void draw(){System.out.println("圆:r = "+r);}public void calcArea(){area = PI * r * r;}}// 三角形类:public abstract class Triangle extends Shape {private double a;private double b;private double c;@Overridepublic void draw() {System.out.println("三角形:a = "+a + " b = "+b+" c = "+c);}
// 三角形:直角三角形、等腰三角形等,还可以继续细化
//@Override
//double calcArea(); // 编译失败:要么实现该抽象方法,要么将三角形设计为抽象类}
  1. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类
  2. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量
// 抽象类
abstract class Animal {protected String name;// 抽象类的构造方法public Animal(String name) {this.name = name;}// 抽象方法abstract void makeSound();
}// 子类
class Dog extends Animal {// 子类的构造方法,调用父类的构造方法public Dog(String name) {super(name);  // 调用父类的构造方法}// 实现抽象方法void makeSound() {System.out.println(name + " says Woof!");}
}public class Main {public static void main(String[] args) {// 通过子类实例化Animal myDog = new Dog("Buddy");myDog.makeSound();  // 输出: Buddy says Woof!}
}

抽象类的作用

抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法.。

有些同学可能会说了, 普通的类也可以被继承呀, 普通的方法也可以被重写呀, 为啥非得用抽象类和抽象方法呢?

确实如此. 但是使用抽象类相当于多了一重编译器的校验。

使用抽象类的场景就如上面的代码, 实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类了, 使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题。

很多语法存在的意义都是为了 “预防出错”, 例如我们曾经用过的 final 也是类似. 创建的变量用户不去修改, 不 就相当于常量嘛? 但是加上 final 能够在不小心误修改的时候, 让编译器及时提醒我们.充分利用编译器的校验, 在实际开发中是非常有意义的.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于vue框架的宠物管理系统fyv66(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,宠物分类,宠物信息,宠物用品,用品分类,洗护类型,商家,宠物洗护 开题报告内容 基于Vue框架的宠物管理系统开题报告 一、背景与意义 随着城市化进程的加速和生活水平的提高&#xff0c;宠物已成为许多家庭的重要成员&#xff0c;宠…

RabbitMQ service is already present - only updating service parameters

Windows下卸载RabbitMQ之后,然后重新注册RabbitMQ服务的时候,报错以下信息: D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin>D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin\rabbitmq-service.bat install RabbitMQ service is already …

FFmpeg 简介及其下载安装步骤

目录 一、FFmpeg 简介 二、FFmpeg 安装步骤 2.1 打开官网 2.2 选择FFmpeg系统版本 2.3 下载FFmpeg压缩包 2.4 将下载好的压缩包进行解压 2.5 设置环境变量 2.5.1 在搜索栏中搜索【环境变量】&#xff0c;然后单击将其打开 2.5.2 找到系统变量中的【Path】&#xff0c;点…

Python异常处理详解:try, except, else, finally的使用方法与示例

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

力反馈手套如何在VR培训解决方案中为用户提供沉浸式体验?

在VR训练中如何为用户带来更加沉浸式的使用体验一直是该领域不断向前探索的发展方向。力反馈手套的融入为VR训练中的沉浸式交互指出了全新的发展方向。通过使用像SenseGlove Nova这样的虚拟现实力反馈手套&#xff0c;用户能够在VR虚拟训练场景中真实的感受到虚拟物体的尺寸大小…

uniapp 小程序0到1教程

先说明一下&#xff0c;uni-app的文档很乱 一、注册微信小程序 如果你还没有微信公众平台的账号&#xff0c;请先进入微信公众平台首页&#xff0c;点击 “立即注册” 按钮进行注册。注册的账号类型可以是订阅号、服务号、小程序以及企业微信&#xff0c;我们选择 “小程序”…

java代码生成器集成dubbo,springcloud详解以及微服务遐想

摘要 今天终于有了点空闲时间&#xff0c;所以更新了一下代码生成器&#xff0c;修复了用户反馈的bug&#xff0c;本次更新主要增加了dubbo和springcloud脚手架的下载功能&#xff0c;架子是本人亲自搭建&#xff0c;方便自由扩展或者小白学习使用&#xff0c;你也许会问为什么…

SeleniumBase在无头模式下绕过验证码的完整指南

概述 在现代Web爬虫技术中&#xff0c;SeleniumBase 是一款强大的自动化测试工具&#xff0c;能够模拟用户行为&#xff0c;进行高效的数据采集。然而&#xff0c;验证码&#xff08;CAPTCHA&#xff09;常常成为爬虫项目中的一个难题&#xff0c;尤其是在无头模式&#xff08…

基于SpringBoot的国家基础信息管理功能的设计与实现

目录 前言 一、标准信息参考 1、信息来源 二、后台基础信息的维护管理 1、实体类和Mapper类 2、业务层和控制层设计 3、前端界面实现 三、管理页面效果 1、列表管理界面 2、国家信息调整 四、总结 前言 在之前的博客中&#xff0c;我们基于GeoTools工具实现了全球各个…

怡然自得英语怎么说,柯桥零基础英语培训

放松的&#xff1b;悠然自得的 例句&#xff1a; Everyone here has a really laid-back attitude. 这里的每个人都是一副优哉游哉的态度。 Visitors seeking deserted and unpolluted beaches and a laid-back atmosphere should go elsewhere. 而寻求静谧、清洁的海滩和…

软件测试面试200问(附30W字面试文档)

Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自…

用gost建立私密的内网穿透网络

内网空透是一项非常有用的东西。 现有比较常见的是用FRP&#xff0c;但是FRP需要配置&#xff0c;文档还挺麻烦。 其实gost是一款功能强大的网络神器&#xff0c;可以轻松实现内网穿透。&#xff08;内网代理&#xff09; 本文介绍的是升级版内容&#xff0c;客户端也需要go…

过孔对信号质量的影响(方式、仿真、结论)

概述&#xff1a; 关于过孔的作用&#xff08;信号孔、电源孔、地孔、机械定位孔、散热通风孔&#xff09;&#xff0c;本文主要叙述过孔在焊盘直径、过孔反焊盘直径、有无非功能焊盘、过孔残桩长度等方面对信号质量带来的影响。 一、 过孔影响信号质量的方式 过孔是PCB上的…

打造高效稳定的FastAPI接口:从统一输出到全局异常处理

引言 在现代应用开发中,API无疑是连接前后端的核心桥梁。无论是Web应用、移动App还是服务间的通信,API的性能和稳定性都直接影响用户体验。而随着Python 3的异步特性不断成熟,FastAPI这款轻量级的Web框架因其超高的性能和灵活性迅速走红。那么,如何用FastAPI构建一个高效稳…

深度学习论文: T-Rex2: Towards Generic Object Detection via Text-Visual Prompt Synergy

深度学习论文: T-Rex2: Towards Generic Object Detection via Text-Visual Prompt Synergy T-Rex2: Towards Generic Object Detection via Text-Visual Prompt Synergy PDF: https://arxiv.org/pdf/2403.14610 PyTorch代码: https://github.com/shanglianlm0525/CvPytorch Py…

代码提交后服务器项目同步更新

一、简介 最近在服务器上部署了一个node后台项目&#xff0c;每次发布都需要更新一下服务器上的后台文件&#xff1b;这样来回操作有些许麻烦。为此想要服务器端后台项目连接代码仓库&#xff0c;监听代码仓库的更新情况&#xff1b;如果有更新则自动执行git pull同步最新代码…

网络编程(16)——asio多线程模型IOServicePool

目录 十六、day16 1. 什么是多线程&#xff1f; 2. IOServicePool实现 3. 服务器修改 4. 客户端修改 5. 总结 1. boost::asio::io_context::work的作用&#xff1f; 十六、day16 在之前的设计中&#xff0c;我们对 ASIO 的使用都是采用单线程模式。为了提升网络 I/O 并…

持续科技创新 高德亮相2024中国测绘地理信息科技年会

图为博览会期间, 自然资源部党组成员、副部长刘国洪前往高德企业展台参观。 10月15日&#xff0c;2024中国测绘地理信息科学技术年会暨中国测绘地理信息技术装备博览会在郑州召开。作为国内领先的地图厂商&#xff0c;高德地图凭借高精度高动态导航地图技术应用受邀参会。 本…

一文详解流处理、批处理和流批一体

一、流处理 定义&#xff1a;流处理是一种对实时流入的数据进行连续处理的方式&#xff0c;流式数据处理中的数据集是不固定和无边界的。 特点&#xff1a; 1.实时性&#xff1a;能够在数据产生的瞬间就对其进行处理&#xff0c;具有非常高的实时性。这使得企业可以及时响应…

光伏项目开发360°管控,规避潜在风险

光伏项目建设在国家的大力支持下如雨后春笋般涌现&#xff0c;投资者对回报率和项目质量的要求越来越高。在这样的背景下&#xff0c;光伏项目全生命周期管理愈发重要。 一、业主沟通开发 积极和业主进行沟通&#xff0c;了解其合作意愿。向业主科普安装光伏的好处&#xff0c…