Java(四)(多态,final,常量,抽象类,接口)

目录

多态

基本概念:

使用多态的好处

类型转换

遇到的问题

解决方法

强制类型转换的一个注意事项

final

常量

抽象类

啥是个抽象类?

抽象类的注意事项,特点

抽象类的场景和好处

抽象类的常见应用场景: 模板方法设计模式

接口

基本概念

接口的好处

JDK8开始,接口新增了三种形式的方法:

接口的多继承


多态

基本概念:

什么是多态:多态在继承/实现情况下的一种现象,表现为: 对象多态、行为多态

咱们来举出一个现实中的一个例子来解释对象多态和行为多态是个啥东西:

对象多态:你是你父母的儿子,是老师的学生,我们每个人会有不同的角色,这个就是生活中的对象多态

行为多态: 我们每个人都会跑,但是有人跑的慢,有的人跑的快,同一种行为会有不同的表现形式,这就是我们说的行为多态

多态的代码实现:

多态的识别技巧:编译看左边,运行看右边

多态的前提: 有继承/实现关系; 存在父类引用子类对象;存在方法重写

有一点需要注意: 多态是对象、行为的多态,Java中的属性(成员变量)不太多态

使用多态的好处

在多态形式下,右边对象是解耦合的,更便于扩展和维护

定义方法的时,使用父类类型的形参,可以接收一切子类对象,扩展性更强,更便利

上面的意思就是我们现在要体测,老师和学生都要参加,我们在体测这个方法中设置形参的时候,设置父类People数据类型就行了,就可以接收他所有的子类对象

类型转换

遇到的问题

多态中有个问题就是对象是不能调用子类中的私有方法的

解决方法

自动类型转换: 父类  变量名 = new 子类()

强制类型转换: 子类 变量名 = (子类) 父类变量

强制类型转换的一个注意事项

存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错

运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException)的错误出来

正确形式

错误形式

强制转换类型的时候,Java建议我们要进行instanceof来进行判断

final

final关键字是最终的意思,可以修饰(类,方法,变量)

修饰类: 该类被称为最终类,特点是不能被继承了

修饰方法:该方法被称为最终方法,特点是不能被重写了

修饰变量: 该变量只能被赋值一次(变量: (1) 局部变量(2)成员变量 : 静态成员变量和实例成员变量)

常量

使用static final 修饰的成员变量就被称为常量

作用: 通常用于记录系统中的配置

抽象类

抽象类是不能定义对象的,假如说我有一个抽象类为A , A a = new A();这样会报错的

Java中有一个关键字叫: abstract,他是抽象的意思,可以用它修饰类,成员方法

abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法

啥是个抽象类?

抽象类的注意事项,特点

1.

2.类该有的变量(成员变量,方法,构造器)抽象类都可以有

3.抽象类最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现

4.子类中的方法必须重写,否则他也是一个抽象类,用abstract来修饰

抽象类的场景和好处

父类知道每个子类都要做某一个行为,但每个子类都做的情况不一样,父类就定义成抽象方法,交给子类去重写实现,我们设计这样的抽象类,就是为了更好的支持多态(对象多态和行为多态)(很重要呀,知道好处了,就能深刻理解这东西了)

我们来举个例子来看看

假如说我现在有需求,某宠物游戏,需要管理猫,狗的数据。猫的数据有;名字,行为是:喵喵喵的叫~,

狗的数据有:名字,行为是: 汪汪汪的叫~,请用面向对象编程设计该程序

思路: 因为我们看见这个猫和狗都有名字,我们可以将猫和狗定义一个父类Animal,父类中写一个成员变量,来存放名字,可以将Animal设置成抽象类,然后子类来实现这个方法重写

抽象类的常见应用场景: 模板方法设计模式

接口

基本概念

语法:

另外说明一点: 接口中是不存在构造器啥的,只有我上面写的两种东西

因为这个是抽象类的有抽象方法,所以是不能创建A类对象的

注意: 接口不能创建对象,接口是用来被类实现的,实现接口的类称为实现类

上面是我们实现的两个接口,下面是我们的实现类,一个实现类可以有多个接口(可以理解成干爹),,实现类实现多个接口,必须重写全部接口的全部抽象方法,否则实现类需要定义成抽象类

接口的好处

弥补了类单继承的不足,一个类可以同时有多个接口

JDK8开始,接口新增了三种形式的方法:


public interface A {/*** 1.默认方法(实例方法):使用default修饰,默认会被加上public修饰,注意,只能使用接口的实现类对象调用* 默认是public方法修饰的*/default void test1(){System.out.println("这是默认方法");test2();}/*** 私有方法:必须用private修饰(jdk9才开始支持)*/private void test2(){}/*** 类方法(静态方法):调用static修饰,默认会被加上public修饰,注意:只能用接口来调用*/static void test3(){}
}

接口的多继承

一个接口可以同时继承多个接口

public interface C extends B,A{

}

注意事项:如果继承的多个接口冲突,就像下面这样,I和J中都有test1方法,但是一个有返回值,一个没有返回值,则就不支持多继承了

 当一个子类既继承了父类,又存在接口,我们可以看下面这个图,IT和Fu都有run方法,但是子类会优先调用它父亲的run方法

 

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

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

相关文章

太累了,是时候让AI数字人来帮我干活了(走,上教程)

阿酷TONY,原创文章,长沙,2023.11.21 关 键 词:AI数字人,生成式AI,智能数字分身适用场景:培训数字人,演讲授课数字人,直播带货数字人特别说明:教程用的是国内…

学习Rust适合写什么练手项目?【云驻共创】

Rust是一门备受关注的系统级编程语言,因其出色的内存安全性、高性能和并发性能而备受赞誉。对于那些希望学习和掌握Rust编程语言的人来说,练手项目是一个不可或缺的环节。通过实际动手完成项目,你可以加深对Rust语言特性和最佳实践的理解&…

如何修改百科内容?百度百科内容怎么修改?

百科词条创建上去是相当不易的,同时修改也是如此,一般情况下,百科词条是不需要修改的,但是很多时候企业或是人物在近期收获了更多成就或是有更多的变动,这个时候就需要补充维护词条了,如何修改百科内容&…

猫12分类:使用yolov5训练检测模型

前言: 在使用yolov5之前,尝试过到百度飞桨平台(小白不建议)、AutoDL平台(这个比较友好,经济实惠)训练模型。但还是没有本地训练模型来的舒服。因此远程了一台学校电脑来搭建自己的检测模型。配置…

C++引用

目录 一.概念 二. 引用特性 三. 常引用 四. 使用场景 1,做参数 2,做返回值 五. 传值,传引用效率比较 5.1 值和引用的作为参数的性能比较 5.2 值和引用的作为返回值类型的性能比较 六. 引用和指针的区别 一.概念 引用不是新定义一…

16位 (MCU) R7F101G6G3CSP、R7F101G6E3CSP、R7F101G6G2DSP、R7F101G6E2DSP是新一代RL78通用微控制器

产品描述 RL78/G24微控制器具有RL78系列MCU的最高处理性能,CPU工作频率高达48MHz,设有灵活的应用加速器 (FAA)。FAA是一款专门用于算法运算的协处理器,可以独立于CPU运行,提供更高处理能力。RL78/G24 MCU具有增强的模拟功能和大量…

构建和应用卡尔曼滤波器 (KF)--扩展卡尔曼滤波器 (EKF)

作为一名数据科学家,我们偶尔会遇到需要对趋势进行建模以预测未来值的情况。虽然人们倾向于关注基于统计或机器学习的算法,但我在这里提出一个不同的选择:卡尔曼滤波器(KF)。 1960 年代初期,Rudolf E. Kal…

LLM之Prompt(二):清华提出Prompt 对齐优化技术BPO

论文题目:《Black-Box Prompt Optimization: Aligning Large Language Models without Model Training》 论文链接:https://arxiv.org/abs/2311.04155 github地址:https://github.com/thu-coai/BPO BPO背景介绍 最近,大型语言模…

oepnpnp - 自己出图做开口扳手

文章目录 oepnpnp - 自己出图做开口扳手概述笔记做好的一套扳手实拍美图工程图END oepnpnp - 自己出图做开口扳手 概述 我的openpnp设备顶部相机安装支架, 由于结构限制, 螺柱的安装位置和机械挂壁的距离太近了. 导致拧紧(手工或者工具)很困难. 也不能重新做相机支架, 因为将…

Michael Jordan最新报告:去中心化机器学习中的契约、不确定性和激励

‍ ‍导读 11月3日,智源研究院学术顾问委员会委员、机器学习泰斗Michael Jordan在以“新一代人工智能前沿”为主题的2023北京论坛 新工科专题论坛上,发表了题为Contracts, Uncertainty, and Incentives in Decentralized Machine Learning(去…

深度学习之基于Pytorch的昆虫分类识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介系统架构技术亮点 二、功能三、系统四. 总结 一项目简介 # 深度学习基于 Pytorch 的昆虫分类识别系统介绍 深度学习在图像分类领域取得了显著的成就&#…

什么是强化学习

1.1 强化学习概述 强化学习(reinforcement learning,RL) 讨论的问题是智能体(agent)怎么在复杂、不确定的环境(environment)中最大化它能获得的奖励。如图 1.1 所示,强化学习由两部…

低代码服务商,中小型数字化软件服务商的新出路

数字化时代大背景下,企业信息化向数字化转型成为所有企业发展的必由之路,企业在对业务模式、流程、组织形式、信息技术等方面进行重新定义时,软件必然参与价值创造的全过程,这势必驱使软件成为推动数字化转型的“引擎”&#xff0…

Django 入门学习总结6 - 测试

1、介绍自动化测试 测试的主要工作是检查代码的运行情况。测试有全覆盖和部分覆盖。 自动测试表示测试工作由系统自动完成。 在大型系统中,有许多组件有很复杂的交互。一个小的变化可能会带来意想不到的后果 测试能发现问题,并以此解决问题。 测试驱…

036、目标检测-锚框

之——对边缘框的简化 目录 之——对边缘框的简化 杂谈 正文 1.锚框操作 2.IoU交并比 3.锚框标号 4.非极大值抑制 5.实现 拓展 杂谈 边缘框这样一个指定roi区域的操作对卷积神经网络实际上是很不友好的,这可能会对网络感受野提出一些特定的要求&#xff0…

初识shell脚本

目录 什么是shell脚本 面向过程语言 面向对象 windows 三种处理逻辑 常用的:usr/bin/bash 基本申明 三个基本语法 执行脚本 脚本错误 三种错误区别 set -e set -u 重定向 管道符 变量 常见的shell变量的类型包括 整数的运算 整数运算 $RANDOM 随机…

来吧,SpringBoot的自动配置原理都在这里了

💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…

Enterprise Architect安装与使用

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方网站:https://www.sparxsystems.cn/products/ea/;图示如下: Enterprise Architect是一个全功能的、基于…

webpack 中,filename 和 chunkFilename 的区别

filename filename 是一个很常见的配置,就是对应于 entry 里面的输入文件,经过webpack打包后输出文件的文件名。比如说经过下面的配置,生成出来的文件名为 index.min.js。 chunkFilename chunkFilename 指未被列在 entry 中,却…

单图像3D重建AI算法综述【2023】

计算机视觉是人工智能的一个快速发展的领域,特别是在 3D 领域。 本概述将考虑一个应用任务:2D 和 3D 环境之间的转换。 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编…