java 抽象

在进入抽象的学习之前,先看下面的代码,有一个Animal类,并且有一个eat方法,我们可以通过 Animal animal = new Animal(); 来创建一个动物类对象。

public class Animal {public void eat(){System.out.println("动物吃东西");}
}

我们给动物创建对象,对吗?很明显这是不对的吧,假设,他说他被动物咬了,你知道他说的动物是什么动物吗?再假设,他说他被狗咬了?你是不是一下子就知道他被狗这个具体的动物对象咬了。

因此,动物本身又不是具体的动物,只有看到猫、狗等具体的动物对象,我们才会知道这动物是什么动物吧。所以,在现实中只要描述的不是具体事物(例如,动物、人类等),那就可以把它理解为抽象的。

同理,每个动物吃的东西应该都是不一样的,我们也不应该给动物具体的吃的方法实现,而应该只给吃的方法声明,只声明这个动物能吃东西即可。通俗来说就是,我们只会说动物能吃东西,不会说它具体吃什么东西,这具体吃的东西看具体动物的特性,例如:狗吃骨头,猫吃鱼等。再举个反例,动物吃骨头?动物吃鱼?是不是怪怪的,每个动物都吃骨头吗?像牛就只吃草。所以不应该给具体的方法实现,只给声明即可。

1、抽象类概述

1.1 概念:在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。

1.2 代码实现

//抽象类
public abstract class Animal {//抽象方法public abstract void eat();
}

2、抽象类的特点

(1)抽象类和抽象方法必须使用abstract 关键字修饰

       ① public abstract class 类名 {}

       ② public abstract void eat();

(2)抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类;

(3)抽象类不能实例化。那抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态。

(4)抽象类的子类要么重写抽象类中的所有抽象方法,要么是抽象类。

或者

(5)代码实现

① Animal类

//抽象类
public abstract class Animal {//抽象方法public abstract void eat();
}

② Cat类

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

③ Dog类

public class Dog extends Animal{public void eat(){System.out.println("狗吃骨头。。");}
}

④ Test类

public class Test {public static void main(String[] args) {Animal animal = new Cat();animal.eat();Animal animal2 = new Dog();animal2.eat();}
}

⑤ 运行结果

3、抽象类的成员特点

3.1 抽象类的成员有哪些?

(1)成员变量,可以是变量,也可以是常量。

(2)构造方法,有构造方法,但是不能实例化。那么,构造方法的作用是什么呢?用于子类访问父类数据的初始化。也就是在子类的构造方法中,会访问父类的构造方法来完成数据的初始化操作。

(3)成员方法:可以有抽象方法,限定子类必须完成某些动作;也可以有非抽象方法,提高代码复用性。

3.2 代码实现

① Animal类

public abstract class Animal {private int age = 20;private final String city = "南宁";public Animal(){}public Animal(int age){this.age = age;}public void show(){age = 40;System.out.println(age);System.out.println(city);}public abstract void eat();
}

② Cat类

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

③ Test类

public class Test {public static void main(String[] args) {Animal animal = new Cat();animal.eat();animal.show();}
}

④ 运行结果

4、抽象类的案例

① Animal类

package Polymorphism;public abstract class Animal {private int age;private String city;public Animal(){}public Animal(int age, String city) {this.age = age;this.city = city;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public abstract void eat();
}

② Cat类

package Polymorphism;import Polymorphism.Animal;public class Cat extends Animal {public Cat() {}public Cat(int age, String city) {super(age, city);}@Overridepublic void eat() {System.out.println("猫吃鱼。。。");}
}

③ Test类

package Polymorphism;public class Test {public static void main(String[] args) {Animal animal = new Cat();animal.setAge(20);animal.setCity("南宁");System.out.println(animal.getAge()+":"+animal.getCity());animal.eat();System.out.println("-------------");Animal animal2 = new Cat(25,"北京");System.out.println(animal.getAge()+":"+animal.getCity());animal.eat();}
}

④ 运行结果

 


 

本文为学习笔记,所参考文章均已附上链接,若有疑问请私信!

创作不易,如果对你有点帮助的话麻烦点个赞支持一下!

新手小白,欢迎留言指正!

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

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

相关文章

Github: Github actions自动化工作原理与多workflow创建和部署

Github actions 1 )概述 Github Actions 是Github官方推出的 CI/CD 解决方案 https://docs.githu.com/en/actions 优点 自动发布流程可减少发布过程中手动操作成本,大幅提升ci/cd效率,快速实现项目发布上线 缺点 存在较高的技术门槛需要利用…

ARM_基础之RAS

Reliability, Availability, and Serviceability (RAS), for A-profile architecture 源自 https://developer.arm.com/documentation/102105/latest/ 1 Introduction to RAS 1.1 Faults,Errors,and failures 三个概念的区分: • A failure is the event of devia…

UE4 Json事件设置Asset值

通过Json事件来设置,比如骨骼网格体(换皮)等等

webpack5零基础入门-10babel的使用

Babel JavaScript 编译器。 主要用于将 ES6 语法编写的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中 1.安装相关包 npm install -D babel-loader babel/core babel/preset-env 2.进行相关配置 2.1第一种写法是在webp…

基于yolov5的单目测距实现与总结+相机模型+标定

写这篇文章的目的是为了总结我之前看的标定,相机模型以及单目测距的内容,如果有错误,还请不吝赐教。 参考链接: 相机模型、相机标定及基于yolov5的单目测距实现 深度学习目标检测目标追踪单目测距 单目测距代码部署(目…

操作系统:malloc与堆区内存管理

malloc是函数而不是系统调用,他的底层是同调调用brk和mmap这两个系统调用实现功能的,具体选择brk还是mmap要看申请的空间大小以及malloc中的阈值(一般是128kb) 注意申请的空间只有使用才会触发缺页中断映射到物理内存 不理解的话先…

流畅的 Python 第二版(GPT 重译)(十二)

第五部分:元编程 第二十二章:动态属性和属性 属性的关键重要性在于,它们的存在使得将公共数据属性作为类的公共接口的一部分完全安全且确实可取。 Martelli、Ravenscroft 和 Holden,“为什么属性很重要” 在 Python 中&#xff0…

鸿蒙开发实战:【Faultloggerd部件】

theme: z-blue 简介 Faultloggerd部件是OpenHarmony中C/C运行时崩溃临时日志的生成及管理模块。面向基于 Rust 开发的部件,Faultloggerd 提供了Rust Panic故障日志生成能力。系统开发者可以在预设的路径下找到故障日志,定位相关问题。 架构 Native In…

成为高效Java工程师的干货笔记

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流,摸鱼划水的小伙伴,请点击【全栈技术交流群】 作为一名Java工程师&…

主食冻干有哪些优缺点?十大热门主食冻干排行榜

科学养猫理念的推广,使得主食冻干喂养越来越受到养猫者的欢迎。主食冻干不仅符合猫咪的自然饮食习惯,还能提供丰富的营养,有助于保持猫咪的口腔和消化系统健康。然而,许多猫主人在选择主食冻干产品时感到迷茫。在本文中&#xff0…

HTML5语法总结

文章目录 一.HTML基本框架二.标题标签三.段落标签四.换行与水平线标签五.文本格式化标签(加粗、倾斜、下划线、删除线)六.图像标签扩展:相对路径,绝对路径与在线网址 七.超链接标签八.音频标签九.视频标签十.列表标签十一.表格标签扩展:表格结构标签合并…

28-5 文件上传漏洞 - 图片马

一、文件内容检测 解析漏洞定义 控制文件是否被当做后端脚本处理 二、图片马绕过 图片马;在图片中包含一句话木马。利用解析漏洞如.htaccess 或文件包含漏洞,对图片马进行解析,执行其中的恶意代码。优势在于可以绕过多种防护机制。 三、图片马制作方法: # 一句话马示例…

【LabVIEW FPGA入门】局部变量和全局变量

局部变量 无法访问某前面板对象或需要在程序框图节点之间传递数据时,可创建前面板对象的局部变量。创建局部变量后,局部变量仅仅出现在程序框图上,而不在前面板上。 局部变量可对前面板上的输入控件或显示件进行数据读写。写入局部变量相当于…

【微服务-Nacos】Nacos集群的工作原理及集群间数据同步过程

上篇文章我们介绍了Nacos集群的搭建方法及步骤,下面我们来看一下Nacos集群的工作原理,一共有两部分:Leader节点选举及各节点数据同步。 1、Nacos集群中Leader节点是如何产生的 Nacos集群采用了Raft算法实现。它是一种比较简单的选举算法&am…

leetcode 18.四数之和 java

题目 思路 整体在三数之和的基础上进行修改。(所有需要修改的地方,我在代码里加了//改 的注释) 大的一个思路就是,在三数之和的外面再套一层循环。相当于固定前两个数。然后这道题目标值变成一个参数了,不是三数之和…

uniapp,导航栏(切换项)有多项,溢出采取左滑右滑的形式展示

一、实现效果 当有多项的导航&#xff0c;或者说切换项&#xff0c;超出页面的宽度&#xff0c;我们采取可滑动的方式比较好一些&#xff01;并且在页面右边加个遮罩&#xff0c;模拟最右边有渐变效果&#xff01; 二、实现代码 html代码&#xff1a; <!-- 头部导航栏 --…

[数据集][目标检测]焊接件表面缺陷检测数据集VOC+YOLO格式2292张10类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2292 标注数量(xml文件个数)&#xff1a;2292 标注数量(txt文件个数)&#xff1a;2292 标注…

使用jscpd对比重复代码

背景 检查项目中重复的代码&#xff0c;或者代码片段 jscpd 两个文件对比 Jscpd 是一个用于检测代码复制和粘贴的工具&#xff0c;它可以比较两个文件并报告相似性的百分比。 以下是如何使用 Jscpd 来比较两个文件的示例&#xff1a; 首先&#xff0c;确保你已经安装了 Nod…

OpenCV4.9.0在Android 开发简介

查看&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;使用 Clojure 进行 OpenCV 开发简介 下一篇&#xff1a;暂无 引言&#xff1a; OpenCV是一个跨平台计算机视觉库&#xff0c;广泛用于图像处理、计算机视觉和机器学习等领域…

雀巢中国劳动力生态系统上线仪式圆满落幕

3月19日&#xff0c;雀巢中国劳动力生态系统上线仪式在雀巢北京总部举办。双方代表对项目进行了回顾&#xff0c;并就2024年的重点任务展开了深入讨论&#xff0c;共同探讨未来合作的方向和策略。 当天下午&#xff0c;劳动力效能典范游学之走进雀巢活动圆满落幕。活动展示了雀…