初识Java(四)

目录

一、继承

1、成员变量与方法的访问

2、初始化时,父类与子类构造方法的执行

3、final关键字

4、组合

二、多态

1、重写

2、向上转型

3、向下转型

4、多态的好处



一、继承

继承就是共性的抽取,提高代码的复用率。

1、成员变量与方法的访问

  • 在子类中访问成员方法时,优先访问子类,成员变量也是同理。
  • 若是在子类与父类中有同名的方法或变量,使用super关键字可访问父类的方法和变量。

2、初始化时,父类与子类构造方法的执行

先去初始化父类,之后再去初始化子类。

所以在子类的构造方法中使用super关键字在第一条语句中,调用父类的构造方法,完成父类的构造。

super与this的相同与不同

相同:

  • 都是Java中的关键字。
  • 都不能在非静态成员方法中使用。
  • 都是在构造方法中的第一条语句,但不能同时出现。

不同:

  • super调用父类构造方法,this调用子类构造方法。
  • super访问子类中父类特有的成员变量,this访问子类特有的成员变量。
  • super()在构造方法中编译器默认提供,this()不会由编译器默认提供。
  • super是在子类中继承下来的父类那一部分的引用,this是当前对象的引用。

3、final关键字

可以修饰类,也可修饰变量。

修饰类后,表示此类不可被继承;

修饰变量后,表示此变量只能被赋值一次,之后不能被修改。

4、组合

Java语言不支持多继承,也就是一个类只能继承一个1类,不能继承多个类。

但是有组合这种形式,也就是有a,b,c,d四个类,可以在d中声明出abc三个类型的变量,作为成员变量,这种形式简称has-a的形式。

// 轮胎类
class Tire{
// ...
}
// 发动机类
class Engine{
// ...
}
// 车载系统类
class VehicleSystem{
// ...
}
class Car{
private Tire tire; // 可以复用轮胎中的属性和方法
private Engine engine; // 可以复用发动机中的属性和方法
private VehicleSystem vs; // 可以复用车载系统中的属性和方法
// ...
}

二、多态

多态浅层理解:多种形态,具体点:对于同一个行为,不同的对象去完成时,产生的状态是不一样的。

下面将逐步讲解,最后会顺利理解多态的概念,下面所写的,都是为了多态服务!

1、重写

例:以手机为例,手机要更新了,但是还有人使用按键机,所以不能将按键机的服务停止,不能在按键机的程序上更新手机,使其变成智能机,因为这样会导致老年机不能再使用了。

我们创建的类也是这个道理:

如果我们要更新类,不能在原来的类上修改,可以新建一个类,使其继承旧类,在新类中重写旧类的某些方法,这样旧类中的方法可以被执行,新类中重写的方法也可以被执行,两者不耽误。

重写的规则:

  • 针对返回值类型,方法名,参数列表:这三者不允许改变,外壳保持不变
  • 针对返回值类型:一般保持不变,如果要变,两个方法的返回值类型必须是父子类的关系
  • 针对访问限定符:重写的方法不能比被重写的方法的访问权限低
  • 针对被重写的方法:不能用static,private,final修饰,也不能是构造方法。

重写和重载有什么不同呢?

重写就是重写抄写一遍,所以很多地方都不能改变,也就是外壳不变,参数列表绝对不能改变,返回值类型看情况,而重载就是为了不取很多类似的名字才有的,所以参数列表必须要改变,返回值类型不做要求。

2、向上转型

子类继承父类后,重写了父类的方法后,使用父类引用,不能访问子类重写的方法,为了解决这个问题,可使用向上转型:将子类对象赋值给父类对象的引用,这样父类对象的引用,引用了子类对象,就可以访问子类对象中重写的那个方法。

1.直接赋值法

父类类型 对象名 = new 子类类型 ()
Animal animal = new Cat( );

2.方法传参法

class TestAnimal {public static void eatFood(Animal a){}
}
public static void main(String[] args) {Dog dog = new Dog( );eatFood(dog);
}

3.返回值返回

public static Animal buyAnimal(String var){
if("狗" == var){
return new Dog("狗狗",1);
}else if("猫" == var){
return new Cat("猫猫", 1);
}else{
return null;
}
}

3、向下转型

向上转型后,子类对象的地址只存在与父类对象的引用,导致子类中特有的方法,也就是没有去重写的方法,无法用父类对象的引用调用,所以使用向下转型,将父类对象的引用值赋值给子类对象的引用即可。

语法格式:子类对象引用 = (子类类型)父类对象引用

dog = (Dog)animal;

但是有时候会出现错误,有时候是狗类这个类型进行了向上转型,转成了Animal类,但是向下转型的时候,Animal转给了猫类,这不符合逻辑,发生类型转换错误。(狗类--->Animal类---->猫类),正常应该是(狗类--->Animal类---->狗类)。

所以在向下转型时,要进行检验,使用instanceof检验

if(animal instaceof Cat) {cat = (Cat) animal;
}

4、多态的好处

看下面的代码,当完成一个行为,eat时,所产生的状态是不一样的,这就是多态。

public static void eatFun(Animal animal) {animal.eat();
}
public static void main(String[l args) { Dog dog = new Dog( name:"圆圆",age: 19);eatFun(dog);Cat cat = new at( name:"十三月",age: 1);eatFun(cat);
}

也可以看出:使用多态,可以提高代码的复用,提高效率,扩展能力强。

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

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

相关文章

秋叶大神中文版Stable Diffusion下载安装使用教程

Stable Diffusion是什么? Stable Diffusion是一款开源的AI绘画软件,于2022年发布,由CompVis、Stability AI和LAION的研究人员创建。该软件具有出色的图像生成功能,使用户能够从头开始绘制作品,也可以使用现有的图像进…

打卡第二十五天:递增子序列、全排列、全排列II、重新安排行程、N皇后、解数独

1、递增子序列 题目 文章 视频 这个递增子序列比较像是取有序的子集。而且本题也要求不能有相同的递增子序列。在子集一题中通过排序,再加一个标记数组来达到去重的目的。而本题求自增子序列,是不能对原数组进行排序的,排完序的数组都是自…

LLM 应用可观测性:从 Trace 视角展开的探索与实践之旅

作者:坤硕 背景介绍 随着生成式 AI 概念的火爆,以 ChatGPT 为代表,市场上涌现了一系列商用或者开源的大模型,同时基于大语言模型以及 AI 生态技术栈构建的应用以及业务场景也越来越多,大规模的模型训练以及模型推理场…

python—pandas基础(1)

文章目录 安装设定系统环境Pandas的主要数据结构Series对象创建使用列表创建属性values和index指定index使用list列表指定index传入字典创建,默认将key作为index将一个标量与index对象一起传入创建 DataFrame对象创建创建DataFrame对象values index columns属性列表…

如何查看cpu架构,查看CPU架构的方法

查看CPU架构的方法有很多,具体取决于你使用的操作系统。以下是一些常见的操作系统中查看CPU架构的方法: Windows查看CPU架构的方法 使用系统信息工具 按 Win R 打开运行窗口。输入 msinfo32 并按 Enter。在系统信息窗口中,找到“处理器”一…

WebGoC题解(14) 151.(2017dloi小乙)第5题 巧克力甜度(sweet)

题目描述 妈妈买了n颗甜度不同的巧克力,规定小C只能吃最大甜度之和是S。 例如:有5颗巧克力,s6,每个的甜度分别为: 4 2 3 1 1,那么小C最多可以吃3颗。 请问你能帮小C计算一下最多能吃多少颗巧克力吗? 输入格…

谁说只有车载HMI界面?现在工业类的HMI界面UI也崛起了

谁说只有车载HMI界面?现在工业类的HMI界面UI也崛起了 引言 艾斯视觉作为行业ui设计和前端开发领域的从业者,其观点始终认为:工业自动化和智能化水平不断提高,人机界面(Human-Machine Interface,简称HMI&a…

普中51单片机:蜂鸣器的简单使用(十一)

文章目录 引言蜂鸣器的分类工作原理无源蜂鸣器压电式蜂鸣器:电磁式蜂鸣器: 电路符号及应用代码演示——无源蜂鸣器 引言 蜂鸣器是一种常见的电子音响器件,广泛应用于各种电子产品中。它们能够发出不同频率的声音,用于警报、提醒、…

Multi Range Read与Covering Index是如何优化回表的?

上篇文章末尾我们提出一个问题:有没有什么办法可以尽量避免回表或让回表的开销变小呢? 本篇文章围绕这个问题提出解决方案,一起来看看MySQL是如何优化的 回表 为什么会发生回表? 因为使用的索引并没有整条记录的所有信息&…

Mysql索引解析

索引 1.创建索引的SQL ALTER TABLE tbl_name ADD PRIMARY KEY (col_list); // 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。ALTER TABLE tbl_name ADD UNIQUE index_name (col_list); // 这条语句创建索引的值必须是唯一的。ALTER T…

加入到「圆心学堂」知识星球后,你将获得些什么呢?

大家好呀,我的知识星球上线啦!加入到「圆心学堂」知识星球后,您将获得些什么呢? 1.共50套原创精品图文教程电子书,包含1000篇文章,涵盖主流框架、中间件、分布式和微服务等领域,紧跟行业趋势&a…

怎么培养政府机关的公文写作能力?

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量 公文写作千万不能零起步,你有时间慢慢学习,但领导哪有时间等你慢慢进步啊。 如果问写公文有什么捷径,那就不得不靠「AI写作工具…

XLua 原理分析 三

前面已经介绍了Lua与C#的基础通信原理,和Wrap中间文件的作用。有了前面2篇的基础,大概已经能搞清这块的原理。 为了加深对这块的印象,这里开始正式分析Xlua中的Lua和C#的通信。 一、Lua如何调用CS的过程 lua的初始化代码: pri…

python基础巩固

基本数据类型 可以用isinstance来判断 a111 isinstance(a,int) True数值运算: >>> 2 / 4 # 除法,得到一个浮点数 0.5 >>> 2 // 4 # 除法,得到一个整数 0 >>> 17 % 3 # 取余 2Python 字符串不能被改变。向一个…

vuex学习day02-state状态、严格模式(strict)、mutations、辅助函数mapMutations、actions

4、state状态 (1)作用:提供共享数据 (2)步骤: 1)找到仓库,通过state提供共享数据 报错1?: 解决方式: 找到.eslintrc.js文件,添加一…

LabVIEW操作系列1

系列文章目录 我的记录: LabVIEW操作系列 文章目录 系列文章目录前言五、特殊用法5.1 取值范围表示5.2 对输入值取值范围进行限定5.3 控制多个While循环停止运行。5.4 获取按钮上的文本5.5 获取按钮上的文本【进阶】 六、使用步骤1.引入库2.读入数据 七、其余功能7.…

python+barcode快速生成条形码3-PyQt6微界面(电商条形码生成工具)

背景 继续上一片文章的电商测试小工具,进行了优化 需求 生成条形码之后,可以通过界面方式读取条形码的图片 支持当个条形码快速生成,以及批量导入 csv文件导入 添加微界面图像按钮,方便操作,更像是在实现测试工具的…

AI在Facebook的应用:预见智能化社交的新前景

在数字化时代,社交媒体平台已成为我们生活的重要组成部分,而人工智能(AI)的快速发展正推动着这些平台向更智能、更个性化的方向发展。Facebook,作为全球最大的社交网络平台之一,正不断探索和应用AI技术&…

基于JAVA+SpringBoot+Vue的oa系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、SpringCloud、Layui、Echarts图表、Nodejs、爬…

x64dbg反汇编技术入门学习笔记

EIP EIP是程序下一次要运行地方 寄存器 临时存放数据,按照Intel规定去存放 window API 微软提供的,用户可以操作系统的一些接口,以函数的形式体现 杀软是如何查杀恶意的 镜像地址 实际地址 实际运行后代码的地址 查外部调用段就可以定位到.rdat…