【JavaSE】Java基础语法(十六):抽象类

news2024/11/26 17:50:51

文章目录

  • 1. 抽象类的概述
  • 2. 抽象类的特点
  • 3. 抽象类的实用价值
  • 4. 抽象类的案例


在这里插入图片描述

1. 抽象类的概述


在这里插入图片描述

当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了!
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽
象类!


2. 抽象类的特点


  • 抽象类和抽象方法必须使用 abstract 关键字修饰
//抽象类的定义
public abstract class 类名 {}
//抽象方法的定义
public abstract void eat();
  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 抽象类不能实例化
  • 抽象类可以有构造方法
  • 抽象类的子类
  • 要么重写抽象类中的所有抽象方法
  • 要么是抽象类

3. 抽象类的实用价值

封装共性功能:抽象类可以封装多个子类共同拥有的功能,避免各自独立实现重复的代码。通过将共性行为定义在抽象类中,具体子类只需要实现自己的特殊逻辑即可,可以大大提高代码的复用性。

规范行为:抽象类通过定义抽象方法,规范了子类的行为,强制子类必须实现相关方法,从而避免了因漏实现或实现不当带来的问题;同时也增加了代码的易读性、易维护性。

反向控制:抽象类能够为子类提供基本行为框架,在子类中调用父类定义的具体方法和属性,以完成基本功能。子类通过继承与扩展的方式实现自己的特殊逻辑,这种反向控制能够在大型工程中有效地管理代码结构和维护。

技术支持:在框架设计、系统维护以及代码重构等过程中,抽象类可以提供技术支持和规范,将大型工程的不同部分组合起来形成协调有序的整体,并且能够保证不同部分之间的解耦和相互独立性。


4. 抽象类的案例


案例需求
定义猫类(Cat)和狗类(Dog)
猫类成员方法:eat(猫吃鱼)drink(喝水…)


实现步骤

  1. 猫类和狗类中存在共性内容,应向上抽取出一个动物类(Animal)
  2. 父类Animal中,无法将 eat 方法具体实现描述清楚,所以定义为抽象方法
  3. 抽象方法需要存活在抽象类中,将Animal定义为抽象类
  4. 让 Cat 和 Dog 分别继承 Animal,重写eat方法
  5. 测试类中创建 Cat 和 Dog 对象,调用方法测试

代码实现

动物类

public abstract class Animal {
	public void drink(){
		System.out.println("喝水");
	}
	
	public Animal(){
	}
	
	public abstract void eat();
}

猫类

public class Cat extends Animal {
	@Override
	public void eat() {
		System.out.println("猫吃鱼");
	}
}

狗类

public class Dog extends Animal {
	@Override
	public void eat() {
		System.out.println("狗吃肉");
	}
}

测试类

public static void main(String[] args) {
	Dog d = new Dog();
	d.eat();
	d.drink();
	Cat c = new Cat();
	c.drink();
	c.eat();
	//Animal a = new Animal();
	//a.eat();
}

在这里插入图片描述

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

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

相关文章

基于TCP、UDP网络编程

文章目录 网络协议分层套接字UDP和TCP差异UDP的APIDatagramSocketDatagramPacket 基于UDP Socket 实现一个回显程序TCP的APISocket的API基于TCP实现回显程序 网络协议分层 应用层: 应用程序拿到数据怎么用传输层: 负责关注传输过程中起点和终点网络层 &…

windows环境下nginx+ftp服务器搭建简易文件服务器

这里写目录标题 1,前言2,FTP服务器搭建3,nginx安装 1,前言 几种文件服务器的对比 1,直接使用ftp服务器,访问图片路径为 ftp://账户:密码192.168.0.106/31275-105.jpg不采用这种方式,不安全容易…

【高效科研工具(二):使用NewbingChat(方法+问题)| Newbing帮你阅读paper、解析paper】

高效科研工具(二):使用NewbingChat(方法问题)| Newbing帮你阅读paper、解析paper 目录 0、前言 1、NewbingChat 介绍 2、NewbingChat 注册方法 3、NewbingChat 遇到的问题 (🇺🇸位置切换问题、…

STM32H7B0VBT6使用Free RTOS配置SD卡+Fatfs文件管理系统

作者:Jack_G 时间:2023.05.26 版本:V1.0 上次修改时间: 环境: \quad \quad \quad \quad STM32Cube MX V6.8.1 \quad \quad \quad \quad STM32CubeH7 Firmware Package V1.11.0 / 04-Nov-2022 \quad \quad \quad \qu…

基于混合蛙跳的路径规划算法

路径规划算法:基于混合蛙跳优化的路径规划算法- 附代码 文章目录 路径规划算法:基于混合蛙跳优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…

改变开发的未来 | 探索无服务器与人工智能的协同效应

近年来,无服务器计算和人工智能深刻改变着应用程序的开发方式。 无服务器计算实现无需管理底层基础架构就能构建和运行应用程序,而人工智能则让应用程序依据数据和算例做出智能决策。借助云计算,开发者打开了一个应用程序开发、构建的全新世…

Linux网络编程——有限状态机

在逻辑单元内部的一种高效的编程方法:有限状态机。 有的应用层协议头部包含数据包类型字段,每种类型可以映射为逻辑单元的一种执行状态,服务器可以根据它来编写相应的处理逻辑,下面代码展示的是状态独立的有限状态机 STATE_MACH…

Python中模块的使用3

在运行Python程序时,总会用到Python的标准库模块。一些标准库模块被内嵌到Python解释器中,通过调用这些模块提供的函数,可以实现特殊的功能。sys模块就是Python的一个标准库模块,该模块被被内嵌到Python解释器中。 1 sys模块的导…

阿里云备案服务码申请方法流程

阿里云备案服务码是什么?ICP备案服务码怎么获取?阿里云备案服务码分为免费和付费两种,申请备案服务码是有限制条件的,需要你的阿里云账号下有可用于申请备案服务码的云产品,如云服务器、建站产品、虚拟主机等&#xff…

计算机组成原理-指令系统-指令格式及寻址方式

目录 一、指令的定义 1.1 扩展操作码指令格式 二、指令寻址方式 2.1 顺序寻址 2.2 跳跃寻址 三、 数据寻址 3.1 直接寻址 3.2 间接寻址 3.3 寄存器寻址 ​ 3.4 寄存器间接寻址 3.5 隐含寻址 3.6 立即寻址 3.7 偏移地址 3.7.1 基址寻址 3.7.2 变址寻址 3.7.3 相对寻址…

ICLR2023 | Mole-BERT: 对分子GNN预训练的反思

原文标题:MOLE-BERT: RETHINKING PRE-TRAINING GRAPH NEURAL NETWORKS FOR MOLECULES 原文链接:Mole-BERT: Rethinking Pre-training Graph Neural Networks for Molecules | OpenReview https://github.com/junxia97/Mole-BERT 一、Introduction At…

TreeMap(1):TreeMap介绍

1 TreeMap的特点 概念: TreeMap是一个双列集合,是Map的子类。底层由红黑树结构构成。 特点: 元素中键不能重复元素会按照大小顺序排序 2 TreeMap的数据结构 2.1二叉查找树 2.1.1二叉查找树的定义 特点: 若左子树不空&#…

分享五个前端WebGis地图框架(优缺点以及该如何选择)附地址

如何选择一个合适的前端GIS框架时,需要考虑以下几点: 1,功能和特性 前端GIS框架的主要目的是在 Web 环境下使用,以可视化地理数据。需要考虑所需功能和特性,例如应用需不需要数据编辑、地图标注、3D 可视化、如何实现…

五、Spring从入门到改行

一、Spring概述 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器&#xff08;框架&#xff09;。 二、Spring基础程序 1、pom.xml中导入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifact…

【特征选择】基于二进制粒子群算法的特征选择方法(KNN分类器)【Matlab代码#28】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】1. 基于群智能算法的特征选择2. 二进制粒子群算法3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】 1. 基于群智能算法…

ollvm反混淆实战

[原创]记一次基于unidbg模拟执行的去除ollvm混淆-Android安全-看雪-安全社区|安全招聘|kanxue.com 参考上面的博客进行操作。这里记录操作细节 首先配置unidbg框架 git clone --recursive https://github.com/zhaoboy9692/unidbgweb.git 然后在unidbg-android中添加自定义类…

Vue3.x的设计理念-Vue3导读

目录 VUE-NEXT【vue3】 VUE-NEXT最核心的变更 Why not SFC&#xff1f;【单文件组件】 Composition API 生命周期钩子变化 什么是响应式&#xff08;Reactivity&#xff09; Reactive值 Proactive vs Reactive 声明式程序 声明式程序&#xff1a;创造语言 声明式程序…

MATLAB串口通信使STM32出现复位情况分析

前言 这几天&#xff0c;在使用matlab进行串口读取的操作&#xff0c;一次读几百个数据后&#xff0c;对数据进行操作分析&#xff0c;打印图片。但是遇到一个奇怪的问题&#xff0c;每次串口操作完毕后&#xff0c;STM32就会出现复位状况。 matlab串口操作 下面直接附上正常…

【特征选择】基于二进制蝗虫优化算法的特征选择方法(KNN分类器)【Matlab代码#29】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】1. 基于群智能算法的特征选择2. 二进制蝗虫优化算法3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】 1. 基于群智能算…

【社区图书馆】读《一本书读懂AIGC:ChatGPT、AI绘画、智能文明与生产力变革》所感

文章目录 《一本书读懂AIGC&#xff1a;ChatGPT、AI绘画、智能文明与生产力变革》目录作者简介我的体会&#xff1a; AI带来的挑战和机遇是不可避免的 《一本书读懂AIGC&#xff1a;ChatGPT、AI绘画、智能文明与生产力变革》 作者&#xff1a;a15a 著 贾雪丽 0xAres 张炯 主编 …