【JAVA】关于抽象类的概念

在这里插入图片描述


个人主页:【😊个人主页】
系列专栏:【❤️初识JAVA】


前言

在Java中,抽象类是一种特殊的类,它无法被实例化。它只能被用作其他类的基类,以便子类可以继承它的属性和方法。今天我们就来谈谈JAVA中的抽象类。
在这里插入图片描述

抽象类

抽象类是一种特殊的类,它不能被实例化,而只能被继承。抽象类的主要作用是为其子类提供公共的抽象方法或属性的定义,让子类去实现如果一个类中有至少一个抽象方法,那么这个类必须被声明为抽象类

抽象方法是指只有方法头,没有方法体的方法。子类必须实现父类中的所有抽象方法,否则子类也必须被声明为抽象类。抽象类和抽象方法的关键字分别为abstract。

抽象类的特点

  1. 抽象类不能被实例化。
  2. 抽象类可以包含普通方法和属性。
  3. 抽象类中可以定义抽象方法。
  4. 继承抽象类的子类必须实现父类中的所有抽象方法,否则子类也必须被声明为抽象类。
  5. 抽象类可以允许不实现抽象方法,但这种情况下,子类必须再次声明抽象方法并实现它。

继承抽象类

Java继承抽象类是指一个子类通过继承一个抽象类来实现抽象类中定义的抽象方法,并可以重写非抽象方法。

实现方式

  1. 定义一个抽象类,使用abstract关键字,抽象类中可以包含抽象方法和非抽象方法。
public abstract class Animal {public abstract void run();public void eat() {System.out.println("eating...");}
}
  1. 定义一个子类,使用extends关键字继承抽象类。
public class Dog extends Animal {@Overridepublic void run() {System.out.println("Dog is running...");}
}

注意:子类必须实现抽象类中定义的所有抽象方法。

  1. 创建子类对象,并调用抽象类中的方法。
public class Main {public static void main(String[] args) {Animal animal = new Dog();animal.run(); // 输出:Dog is running...animal.eat(); // 输出:eating...}
}

注意:抽象类不能被实例化,但可以通过子类的对象来实现多态。

抽象方法

Java的抽象方法是一种没有实现代码的方法,需要由子类来实现具体的逻辑。在Java中,抽象方法必须被定义在抽象类中,抽象类不能被实例化,只能被继承。抽象类中可以包含非抽象方法,但至少要包含一个抽象方法。

声明抽象方法会造成以下两个结果:

  • 如果一个类包含抽象方法,那么该类必须是抽象类。
  • 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
    继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。
    如果Salary类继承了Employee类,那么它必须实现computePay()方法:

实例

public abstract class Shape {protected int x, y; // 坐标public Shape(int x, int y) {this.x = x;this.y = y;}// 抽象方法,必须在子类中实现public abstract void draw();// 普通方法public void move(int deltaX, int deltaY) {x += deltaX;y += deltaY;}
}public class Circle extends Shape {private int radius; // 半径public Circle(int x, int y, int radius) {super(x, y);this.radius = radius;}@Overridepublic void draw() {System.out.println("Drawing Circle");}
}public class Square extends Shape {private int side; // 边长public Square(int x, int y, int side) {super(x, y);this.side = side;}@Overridepublic void draw() {System.out.println("Drawing Square");}
}

在这个例子中,我们定义了抽象类Shape和其子类Circle和Square。Shape类包含了一个抽象方法draw()和一个普通方法move()。Circle和Square子类都继承了Shape类,并实现了draw()方法。由于draw()方法是抽象的,因此它必须被子类实现。在这个例子中,Circle和Square子类分别实现了自己的draw()方法,分别输出Drawing Circle和Drawing Square。

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

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

相关文章

Java Spring Boot: 极简配置与快速开发的利器

引言: Java Spring Boot是一款开源的Java框架,它以极简配置和快速开发为特点,帮助开发者轻松构建基于Spring框架的应用程序。本文将介绍Spring Boot的核心特性,并结合案例和代码,展示其在简化配置、内嵌服务器、自动化…

C++编程法则365天一天一条(14)sizeof运算符使用

文章目录 基本用法失效的多态数组就是数组使用限制作用于空class作用于引用基本用法 sizeof运算符用于查询对象或类型的大小。它在编译时计算,并返回以字节为单位的对象或类型的大小。 在某些情况下,我们需要知道对象的实际大小。例如,当我们分配内存或操作具有特定大小要…

qml 无法修改listview表头控件文本

比如在Listview的表头设置了一个复选框,之后想要在其他控件中动态修改复选框的文本,通过id来修改无效,因为它在表头内,对其他控件来说未定义。可以采用一个外部属性来解决: Window {width: 400height: 400visible: tr…

[2023.09.24]: 今天差点又交白卷

今天周日,搞定了家里装修的一件事情,周末的事特别多,总算在10点的时候,解决了昨天那个输入焦点设置失败的问题。 在探索Rust编写基于web_sys的WebAssembly编辑器:挑战输入光标定位的实践中,我们总结了设置光…

线性代数基础-行列式

一、行列式之前的概念 1.全排列: 把n个不同的元素排成一列,称为n个元素的全排列,简称排列 (实际上就是我们所说的排列组合,符号是A,arrange) 2.标准序列: 前一项均小于后一项的序列…

[Linux入门]---管理者操作系统

文章目录 1.操作系统概念2.设计操作系统的目的3.操作系统如何进行管理系统调用和库函数概念 1.操作系统概念 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括: 内核(进程管理,内存…

ISP技术概述

原本或许是为了对冲手机系统和APP设计无力感而诞生的拍照功能,现今却成为了众手机厂家除背部设计外为数不多可“卷”的地方,自拍、全景、夜景、小视频等旺盛的需求让这一技术的江湖地位迅速变化。对圈内人士而言,这一波变化带来的后摄、双摄、多摄、暗光、防抖、广角、长焦、…

滑动窗口-求数组的所有连续子数组【学习算法】

滑动窗口-求数组的所有连续子数组【学习算法】 前言版权推荐滑动窗口-求数组的所有连续子数组代码 最后 前言 2023-9-24 22:46:27 以下内容源自《【学习算法】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页…

【android】如何设置LD_LIBRARY_PATH?

目录 一 配置方法 1 进入Android shell 2 使用export命令 3 使用echo命令查看变量是否设置成功 二 扩展 1 LD_LIBRARY_PATH设置多个路径 2 push文件 一 配置方法 android中配置LD_LIBRARY_PATH的方法具体为: 1 进入Android shell adb shell 2 使用export…

ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(一)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 1、数据库表方面 在原来sys_notice修改基础上增加一个表叫sys_notice_send 表结构如下: DROP …

AVLoadingIndicatorView - 一个很好的Android加载动画集合

官网 GitHub - HarlonWang/AVLoadingIndicatorView: DEPRECATED 项目简介 AVLoadingIndicatorView is a collection of nice loading animations for Android. You can also find iOS version of this here. Now AVLoadingIndicatorView was updated version to 2.X , If …

GitStats - 统计Git所有提交记录工具

如果你是研发效能组的一员或者在从事 CI/CD 或 DevOps,除了提供基础设施,指标和数据是也是一个很重要的一环,比如需要分析下某个 Git 仓库代码提交情况: 该仓库的代码谁提交的代码最多 该仓库的活跃度是什么样子的 各个时段的提交…

安装Linux虚拟机——以ubuntukylin-16.04.7-desktop-amd64.iso为例

正文 安装VMware 重要提示 安装软件之前,请先退出360、电脑管家等安全类软件,这类软件会阻止我们安装的软件进行注册表注册,很可能导致安装失败。确认物理机(也就是你自己使用的电脑)的防火墙已经关闭。 下载 打开…

python web编程一:token、session、cookie、密码加解密

1 认证 1 传统的session-cookie机制 HTTP协议是无状态协议,为了解决它产生了cookie和session技术。 浏览器发起第一次请求到服务器,服务器发现浏览器没有提供session id,就认为这是第一次请求,会返回一个新的session id给浏览器…

数据仓库整理

数仓 olap vs oltp OLTP主要用于支持日常的业务操作,如银行交易、电子商务等,强调数据的准确性、实时性和并发性。OLAP主要用于支持复杂的数据分析,如数据仓库、决策支持等,强调数据的维度、聚合和可视化。 将OLTP数据库的数据…

C++之lseek64应用总结(二百三十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

CMU15-445 format\clang-format\clang-tidy 失败

CMU15-445 format\clang-format\clang-tidy 失败 问题修改 问题 -- Setting build type to Debug as none was specified. -- Youre using Clang 14.0.0 CMake Warning at CMakeLists.txt:67 (message):BusTub/main couldnt find clang-format.CMake Warning at CMakeLists.tx…

YouCompleteMe 安装踩坑

Vim里下载完插件后,打开vim,可能遇到以下报错 The ycmd server SHUT DOWN (restart with ‘:YcmRestartServer’). Unexpected exit code 1 没有安装server,进入其目录,C语言类的运行 python3 install.py --clangd-completer --v…

下拉框组件的封装(element ui )

目录 实现思路 创建通用的下拉选择框组件 如何使用这个组件 结语 当你使用Vue.js构建Web应用时,封装可复用组件是提高开发效率和代码可维护性的关键之一。在这篇文章中,我们将探讨如何使用Vue.js来创建一个通用的下拉选择框组件,以及如何…

磁盘检测工具,根据lba查找对应文件

Q: 磁盘检测工具,如何根据损坏的lba查找对应的文件? 1.运行cmd,输入 fsutil fsinfo ntfsinfo e: 2.从上述结果中找到 "每扇区字节数(Bytes Per Sector)"、"每个簇字节数(Bytes Per Cluster&#xff0…