java中抽象类和抽象方法

news2024/11/8 9:38:09

文章目录

前言

一、抽象类和抽象方法是什么?

1.抽象类

2.抽象方法

二、使用方法

1.实操展示

2.注意事项

总结


前言

        苹果这个具体的水果,它具有的属性为,红色;它具有的方法为,被啃。那么,水果,这个定义,不知阁下又该如何应对?很明显,这是一个抽象的概念,是苹果、香蕉、桃子......的集合,而水果具备的方法,被吃,又该如何描述?是像苹果一样直接啃,核扔掉?还是像香蕉一样拨开皮,吃掉里面的果肉?在java中,可以将苹果视为一个类,水果这种抽象的概念即为抽象类;苹果这个类中,方法,被啃,可以具体执行。水果这个抽象类,方法,被吃,无法具体执行,怎么吃?啃?剥皮?切开?被吃,这个抽象类中的方法即为抽象方法


一、抽象类和抽象方法是什么?

1.抽象类

        抽象类:如颜色,名字,动物,食物等一类事物的总称,不具体的概念,皆可创建为抽象类

                abstract 关键字 将普通类转换为抽象类

               语法:public/protect abstract 抽象类名{}

package projectMy;

public abstract Animal{
    //创建了一个抽象类 Animal类
    //some codes
}

2.抽象方法

        抽象方法:例如繁衍,描述形状,计算面积等一类行为的总称,不具体的行为,皆可创建为抽象方法

                abstract 关键字 将成员方法转换为抽象方法 

                语法:abstract void 方法名();

package projectMy;

public abstract class Animal {
	abstract void breed();
    //创建了抽象方法 breed()方法
}

二、使用方法

1.实操展示

        代码构架:

        (1)创建抽象类 Animal类,创建breed(),feed(),move()抽象方法以及name()方法

package projectMy;

public abstract class Animal {
	abstract void breed();
    //繁衍方法
	abstract void feed();
    //获食方法
	abstract void move();
	//移动方法

	String name() {
		return "类别:动物界";
	}
}

         (2)创建抽象类 Bird类,继承 Animal抽象类,实现breed(),move()方法,补充name()方法

package projectMy;

public abstract class Bird extends Animal{
	void breed() {
        //覆写实现了父类的breed()抽象方法
		System.out.println("繁殖方式:卵生");
	}
	
	void move() {
        //覆写实现了父类的move()抽象方法
		System.out.println("移动方式:飞翔");
	}
	
	abstract void feed();   
	//不写父类的抽象方法也不会报错,写了是方便记忆,防止遗忘了这个方法

	String name() {
        //补充父类的name()方法
		return super.name()+"鸟类";
	}
}

        (3)创建 Eagle 类,继承 Bird抽象类,实现feed()方法,补充name()方法,创建main方法

package projectMy;

public class Eagle extends Bird{
	void feed() {
        //覆写了父类的feed()抽象方法
		System.out.println("获食方法:捕猎");
	}
	
	String name(){
        //补充了父类的name()方法
		return super.name()+"鹰形目鹰科";
	}
	
	public static void main(String[] args) {
		Eagle eagle = new Eagle();
		//调用父类覆写的方法,和本类实现父类后的方法
		System.out.println("鹰");
		System.out.println(eagle.name());
		eagle.breed();
		eagle.feed();
		eagle.move();
		
	}
}

        输出结果:  

        (4)创建 Dove类,继承 Bird抽象类,实现feed()方法,补充name()方法,创建main方法

package projectMy;

public class Dove extends Bird{
	void feed() {
        //覆写了父类的feed()抽象方法
		System.out.println("获食方法:采集");
	}
	
	String name() {
        //补充了父类的name()方法
		return super.name()+"鸽形目鸠鸽科";
	}
	
	public static void main(String[] args) {
		Dove dove = new Dove();
		//调用父类覆写的方法,和本类实现父类后的方法
		System.out.println("鸽子");
		System.out.println(dove.name());
		dove.breed();
		dove.feed();
		dove.move();
	}
}

        输出结果: 

         总结:

        创建了两个抽象类。

                Animal类,动物类,创建了抽象方法,繁衍,获食,移动,三个抽象行为

                Bird类,鸟类,继承了Animal类,将繁衍,移动,两个父类的抽象方法,具体为了鸟类的行为,即“产卵”,  “飞翔”。抽象方法,获食,仍需具体为什么鸟,才能覆写为具体获食行为。

        创建了两个都继承了Bird抽象类的类

                Eagle类,鹰类,将“获食”这一抽象行为,具体为了“捕猎”

                Dove类,鸽子类,将“获食”这一抽象行为,具体为了“采集” 

         结论:      

                抽象类和抽象方法,可以实现“物品分类”的效果,例如生物分类学中的“界、门、纲、目、科、属、种”,在“界”这一类创建基本的符合生物的抽象方法,逐级根据需要增加抽象方法。所有的抽象方法,只要到了可以实现为具体行为的某一子类中,该子类即可将其实现,从而到最后一级“种”时,每个物种的信息都完整地显示出来。

                1.有利于简化代码,防止重复造车轮

                2.有利于清晰框架,防止代码逻辑混乱

2.注意事项

        抽象类:

                抽象类本身不能实例化创建本类的对象,必须通过子类向上转型

                        语法:抽象类名 对象 = new 子类();

Bird bird1 = new Eagle();
//Eagle类向上转型,赋值给了抽象类的对象 bird1,相当于创建了Bird抽象类对象

        抽象方法:

                 (1)创建抽象方法时,不需要实现,没有“{}”

abstract void feed();

                 (2)抽象方法只能在抽象类中被创建成员方法在抽象类和普通类中都可被创建

                 (3)子类继承了一个抽象父类子类必须实现这个父类中没有被实现的所有抽象方法 

                 (4)抽象子类继承了抽象父类,不必实现父类的抽象方法但建议写上没有实现的抽象方法,避免在下一个继承中,遗忘了父类的某个抽象方法

                 (5)抽象父类的抽象方法,只要被一个子类/抽象子类实现,后续继承的子类便不用再次重写该抽象方法


总结

        以上就是java中的抽象类和抽象方法,简单介绍了抽象类和抽象方法的使用,更多的用处,需要在实际项目中操作才知道,如果对“接口”这个概念不太熟悉,up会在下篇文章中帮你了解一下。

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

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

相关文章

system Verilog 验证测试平台编写指南——读书笔记(持续更新)

第一章 验证导论 1、基本测试平台的功能 测试平台的用途在于确定待测设计的正确性。包含下列步骤: (1)产生激励。 (2)把激励施加到DUT上. (3)捕捉响应。 (4)检验正…

【Visual Studio】开发 Qt 时右键没有自动添加 slots 槽的功能,使用 C++ 语言,配合 Qt 开发串口通信界面

知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 文章目录 Ref. 基于 Visual Studio 环境下使用 Qt,发现右键没有自动添加槽的功能,需要自己想办法。我看网上介绍了不止一种方法&#…

Micrometer实战

Micrometer 为基于 JVM 的应用程序的性能监测数据收集提供了一个通用的 API,支持多种度量指标类型,这些指标可以用于观察、警报以及对应用程序当前状态做出响应。 前言 可接入监控系统 监控系统的三个重要特征: 维度(Dimensio…

事务的历史与SSI——PostgreSQL数据库技术峰会成都站分享

前言 PostgreSQL数据库技术峰会成都站 近期(2023年6月17日),由中国开源软件推进联盟PG分会发起的“PostgreSQL数据库技术峰会成都站”圆满举行。我也有幸作为演讲嘉宾参加了此次峰会,收获很多。 (分会回顾和所有pp…

Qt编写监控实时显示和取流回放工具(回放支持切换进度)

一、前言 现在各个监控大厂做的设备,基本上都会支持通过rtsp直接取流显示,而且做的比较好的还支持通过rtsp回放取流,基本上都会约定一个字符串的规则,每个厂家都是不一样的规则,比如回放对应的rtsp地址还要带上时间范…

Java8 List集合如何指定打印分隔符

目录 背景方法一:String.join(推荐)方法二:Collectors.joining总结 背景 无论是在学习还是日常的应用开发过程中,我们经常会需要使用分隔符将 List 集合打印出来。 如下所示: import java.util.Arrays;pub…

数据结构与算法基础(青岛大学-王卓)(5)

叮叮咚咚,新一期来袭,我还在吃桃子,吃桃子,吃桃子。。。串和python的字符串差不多,数组和广义表像是python的list 文章目录 串(string) - 字符串概念及术语串的类型定义存储结构(同线性表)串的模式匹配算法…

leetcode46. 全排列(回溯算法-java)

全排列 leetcode46. 全排列题目描述解题思路代码演示 回溯算法专题 leetcode46. 全排列 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/permutations 题目描述 给定一个不含重复数字的数组 nums ,返回其 所有…

关于平差中误差方程 v=Bx-l 的探讨

文章目录 Part.I IntroductionPart.II 误差方程的探讨Chap.I 符号表示Chap.II 误差方程的含义Chap.III 误差方程的其他形式Chap.IV 平差的大致流程 Part.III 误差方程的表示形式 Part.I Introduction 在平时阅读文献或者整理笔记时,经常会看到各种各样的有关误差方…

Git安装详细教程(win11)

Git安装详细教程(win11) 一、下载二、安装三、配置 一、下载 官网下载:点击下载 网盘下载:点击下载 二、安装 双击程序运行,点击next 选择安装路径,我安装在了D盘,如下图所示,…

Server - 测试 GPU 的显卡使用率与张量之间的关系

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131331049 NVIDIA A100 是一款基于 Ampere 架构的高性能 GPU,专为 AI、数据分析和高性能计算等应用场景设计。NVIDIA A100 具…

【Java入门基础第10天】Java程序结构

Java程序结构 1、Java程序结构什么是Java程序结构? 2、Java注释1、单行注释2、多行注释3、多行注释 1、Java程序结构 什么是Java程序结构? 程序是由程序块组成的,所谓程序块,指的是使用一对{ } 包含若干的代码的总称。程序块是由…

【Python 基础篇】Python 变量与数据类型以及数据类型转换

文章目录 引言一、变量和常见数据类型1. 变量2. 常见数据类型 二、数据类型转换结论 引言 Python 是一种广泛应用于各个领域的高级编程语言,其灵活性和易用性使其成为众多开发者的首选。在 Python 中,变量是程序中存储数据的基本单元,而数据…

数据结构学习笔记:概论

✨博文作者:烟雨孤舟 💖 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教! 目录 数据结…

哈工大计算网络课程网络层协议之:IP数据报、IP子网、子网掩码详解

哈工大计算网络课程网络层协议之:IP数据报、IP子网、子网掩码详解 文章目录 哈工大计算网络课程网络层协议之:IP数据报、IP子网、子网掩码详解Internet网络层IP数据报(分组)格式IP数据报分片最大传输单元(MTU&#xff…

网工内推 | 云计算专场,有通讯补助,13薪,带薪年假

01 中电信数智科技有限公司湖南分公司 招聘岗位:云计算工程师 职责描述: 1、云计算平台环境的搭建:安装、部署、配置、优化; 2、云计算平台有关的解决方案、平台测试; 3、桌面云和虚拟化项目的交付和维护工作&#…

功能强大却十分小众的5款软件

有些软件虽然功能强大,使用便捷,但是却没有得到广泛的关注和推荐,这并不意味着它们不值得一试,相反,它们可能是你不知道的宝藏。我的任务就是要把这些隐藏的好软件分享给大家。 轻量级笔记——CintaNotes CintaNotes…

PCB设计系列分享-LDO的布局布线指南

目录 概要 整体架构流程 技术名词解释 技术细节 小结 概要 “噪声问题” 这是每位电路板设计师都会听到的四个字。为了解决噪声问题,往往要花费数小时的时间进行实验室测试.以便揪出元凶,但最终却发现,噪声是由开关电源的布局不当…

27-1BP_Adaboost强分类器公司财务预管建模——强预测器和弱预测器(附matlab程序)

1.简述 学习目标:进行强预测器和弱预测器的训练来减小误差 BP_Adaboost模型 Adaboost算法的思想是合并多个“弱”分类器的输出以产生有效分类。其主要步骤为:首先给出弱学习算法和样本空间,从样本空间中找出m组训练数据,每组训练…

0015-TIPS-pawnyable : userfaultfd

原文 Linux Kernel PWN | 040303 Pawnyable之userfaultfd userfaultfdの利用 题目下载 代码分析 #include <linux/cdev.h> #include <linux/fs.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/random.h> #include &…