Java中的继承和多态

【Java基础知识 17】Java继承和多态 关键字extends表明正在构造的新类派生于一个已存在的类。已存在的类称为超类(superclass),新类称为子类(subclass)。超类和子类是 Java 程序员最常用的两个术语。在设计类的时候,应该将通用的方法放在超类中, 而将具有特殊用途的方法放在子类中。 阅读详情

目录

一、继承

1、继承的概念

2、继承的语法

(1)关键字extends

(2)父类成员访问

(3)super

a.子类方法中访问父类的成员

b.将基类继承下来的成员构造完整

c.super和this的比较

(4)final关键字

二、组合

三、多态

1、多态的概念

2、多态实现条件

3、代码举例

4、重写

(1)重写的概念

(2)重写的规则

5、向上转型和向下转型

(1)向上转型

(2)向下转型

6、动态绑定


一、继承

Java在面向对象的思想中提出了继承的概念,以便更好的实现代码的共性提取以及代码的复用

1、继承的概念

如图所示,Dog类和Cat类继承了Animal类,其中Dog类和Cat类被称为子类或派生类,Animal类被称为父类或基类或超类,它们的关系也如父子一样,Dog和Cat通过继承Animal来复用Animal中的成员,也就是说子类可以复用父类中成员,子类在实现时只需关心自己新增加的成员即可

Java不支持多继承,也就是一个子类最多只能对应一个父类

2、继承的语法

(1)关键字extends

在Java中通过关键字extends来表示继承关系

举例:

注意:

1. 子类会将父类中的成员变量或者成员方法继承到子类中了

2. 子类继承父类之后,必须要新添加自己特有的成员,体现出与基类的不同,否则就没有必要继承了

(2)父类成员访问

a. 子类访问父类成员变量:遵循就近原则,如果子类自己有则用自己的,没有则用父类的,都没有报错,当子类和父类的成员变量同名时,优先使用子类的

b. 子类访问父类成员方法:与变量访问一致,也遵循就近原则,如果有子类和父类的方法发生重载的情况,选择参数合适的那个方法

但若子类中存在与父类中相同的成员时,那如何在子类中访问父类相同名称的成员呢?我们可以通过super关键字来解决这个问题

(3)super

a.子类方法中访问父类的成员

Java提供了super关键字,该关键字主要作用:在子类方法中访问父类的成员

在子类方法中,如果想要明确访问父类中成员时,借助super关键字即可

【注意事项】

1. 只能在非静态方法中使用(这点和this关键字相同)

2. 在子类方法中,访问父类的成员变量和方法

b.将基类继承下来的成员构造完整

子类对象构造时,需要先调用父类构造方法,然后执行子类的构造方法:

当父类构造方法有参数时,子类构造方法中需要由自己添加带参的super()来将基类继承下来的成员构造完整,然后再调用子类自己的构造方法,将子类自己新增加的成员初始化完整

c.super和this的比较

相同点:

1. 都是Java中的关键字

2. 只能在类的非静态方法中使用,用来访问非静态成员方法和字段

3. 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在

不同点:

1. this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成 员的引用

2. 在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性

3. 在构造方法中:this(...)用于调用本类构造方法,super(...)用于调用父类构造方法,两种调用不能同时在构造方法中出现

4. 构造方法中一定会存在super(...)的调用,用户没有写编译器也会增加,但是this(...)用户不写则没有

(4)final关键字

final关键字可以用来修饰变量、成员方法以及类

修饰变量:使变量值不能被改变

修饰成员方法:使成员方法无法被重写

修饰类:使类无法被继承

二、组合

和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果

组合并没有涉及到特殊的语法 (诸如 extends 这样的关键字), 仅仅是将一个类的实例作为另外一个类的字段

继承表示对象之间是is-a的关系,比如:狗是动物,猫是动物

组合表示对象之间是has-a的关系,比如:汽车有轮胎、发动机、车载系统

三、多态

1、多态的概念

多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态

2、多态实现条件

在java中要实现多态,必须要满足如下几个条件,缺一不可:

1. 必须在继承体系下

2. 子类必须要对父类中方法进行重写

3. 通过父类的引用调用重写的方法

多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法

3、代码举例

运行结果:

4、重写

(1)重写的概念

重写(override)是子类对父类方法进行重新编写

(2)重写的规则

a.子类的返回值类型、方法名、参数要求和父类必须相同(返回值类型也可以不同,但是必须是具有父子关系的)

b.父类方法不能被private  static  final修饰,构造方法不能重写

c.子类的访问权限要大于等于父类的访问权限。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为 protected(只能是public)

5、向上转型和向下转型

(1)向上转型

a.向上转型:实际就是创建一个子类对象,将其当成父类对象来使用,父类类型引用子类对象

b.语法格式:父类类型 对象名 = new 子类类型()

animal是父类类型,但可以引用一个子类对象,因为是从小范围向大范围的转换

c.使用场景:直接赋值、方法传参、方法返回

(2)向下转型

与向上转型相反,向下转型是由大范围到小范围的转变,因此必须类型强制转换

向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。Java中为了提高向下转型的安全性,引入 了instanceof,如果该表达式为true,则可以安全转换:

6、动态绑定

动态绑定的两个条件:

(1)向上转型

(2)父类的方法在子类中重写

1104全部报表版本号-银监会报表 G4B_Ⅲ(a)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第一档)》G4B_Ⅲ(b)X1《与非中央交易对手的证券融资交易对手信用风险违约风险计算表(权重法)(第一档)》G4B_Ⅲ(a1)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第二档)》Ⅲ(a)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第二档)》Ⅲ(a1)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第一档)》 阅读详情

相关推荐

东华大学2020考研计算机OJ题目解答分享——进阶篇(4)

4 一个月的天数 作者: Turbo时间限制: 1S章节: 分支结构 问题描述 : 输入年和月,输出该月有几天。 输入说明 : 输入两个整数,中间以空格分隔,第一个整数表示年,第二个整数表示月。 输出说明 : 输出该年该月的天数,输出时,行首与行尾均无空格,仅输出一个整数。 输入范例 : 2000 2 输出范例 : 29 解答思路: 闰年和质数出题一样频繁,简单必会 AC代码 #include...

qq_38344326的博客 472

(java)继承和多态 (详解)

1 继承 1.1为什么需要继承 1.2 继承概念 1.3 继承的语法 1.4 父类成员访问 1.4.1 子类中访问父类的成员变量 1.4.2 子类中访问父类的成员方法 1.5 super关键字 1.6 子类构造方法 1.7 super和this 1.7.1 this 1.7.2 super和this 1.8 再谈初始化 1.9继承方式 1.10继承与组合 2 多态 2.1 多态的概念 2.2 多态实现条件 2.3 重写 2.4 向上转移和向下转型

iiiiiihuang的博客 5476

【基于51】红外寻迹智能小车 - 代码篇

这是一个基于C51单片机的红外巡线智能小车,是一个适合嵌入式单片机、C语言初学者练习的小Demo,文章提供完整的项目思路、免费的源代码。

ZER00000001的博客 3万+

Java 继承与多态

学会 Java 中的继承与多态,重载和重写又怎么用。

qq_55829345的博客 2010

Vector CANape的使用记录

开门见山,今天想和大家分享下CANape使用记录,分享原因是近日在分析一个客户现场软件问题时,需要用到CANape来实时的监测ECU中的变量,因为之前对CANape的认知比较浅薄,觉得标定工程师使用他就足够了,但是这次的经历让我觉得需要写点东西来记录自己学习并使用他的过程。 相信大家能够在网上找到很多关于如何使用CANape的文章,从新建Project到后面的数据的观测、保存以及回放等等。我个人也是这么学过来的,所以我不打算从那些方面着手去描述如何使用她,而是根据我的真实使用过程以及问题的抛出到如何解决来

2万+

Windows用户必看:如何在WSL中完美安装CosyVoice的ttsfrd依赖(附避坑指南)

本文为Windows用户提供了在WSL中部署CosyVoice语音合成模型并解决其关键依赖ttsfrd的完整指南。文章详细介绍了从WSL环境配置、Python环境搭建、模型下载到ttsfrd深度安装与问题排查的全流程,并针对WSL特有的文件系统、权限和GPU支持问题提供了解决方案,帮助开发者高效攻克部署难题。

dell8的博客 248

【Java】继承和多态 (超详细!)—— 有码有图有真相

Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是现实世界错综复杂,事物之间可能会存在一些关联,那在设计程序是就需要考虑。

小黑屋的黑小子的博客 1842

手势控制 Python !Leap Motion Python 开发教程 (二)

手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参...

成畅的博客 3193

【Java】继承和多态

上述图示中,Dog和Cat都继承了Animal类,其中:Animal类称为父类/基类或超类,Dog和Cat可以称为Animal的子类/派生类,继承之后,子类可以复用父类中成员,子类在实现时只需关心自己新增加的成员即可。总结:成员方法没有同名时,在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有时再到父类中找,如果父类中也没有则报错。(1)通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到则访问,否则编译报错。2、子类和父类成员变量同名。

2301_79765510的博客 2072

Autodesk全家桶安装总报错1603?一个服务设置搞定3dsMax和CAD安装回滚问题

本文详细解析了Autodesk全家桶安装过程中常见的1603错误,特别是3ds Max和CAD安装回滚问题。通过调整AdskLicensingService服务的账户权限,提供四步修复法和安装流程优化策略,帮助用户彻底解决安装难题,提升Autodesk软件的安装成功率。

weixin_30955617的博客 1119

避开模板匹配的坑:OpenCVSharp中边缘梯度算法的优化实践

本文深入探讨了OpenCVSharp中边缘梯度算法在模板匹配中的优化实践,解决了传统方法在尺度变化、角度旋转和光照差异下的局限性。通过Sobel算子提取边缘梯度特征,结合轮廓检测和多尺度匹配策略,显著提升了匹配的鲁棒性和准确性。文章还分享了并行计算、内存访问优化等实战技巧,适用于工业检测和自动化识别场景。

http9protocoller的博客 198

java继承和多态

继承和多态 文章目录继承和多态继承多态 继承 多态

weixin_49830664的博客 7377

龙腾CMS downloadFile接口任意文件读取漏洞复现 [附POC]

大连网龙网络科技有限公司专注于在信息科技领域中向客户提供商业解决方案,是专业的互联网服务解决方案提供商和网络营销服务专家,为用户提供一体化的网络营销整体解决方案,龙腾CMS downloadFile接口存在任意文件读取漏洞。

薛定谔嘚喵博客 720

Java:继承和多态

面向对象程序三大特性:封装、继承、多态。在前的一章我们已经了解了什么是封装,而今天我们就要开始了解后面的两个————继承和多态。在Java中如果要表示类之间的继承关系,需要借助extends关键字那么让我们来举个例子,我们知道猫和狗都可以拥有名字和年龄,和吃饭的行为,对于这些共性的行为和属性,我们可以将它放入一个类当中,让这个类作为父类,而我们的猫类和狗类作为子类,同时着不相同的行为和属性,而这些我们会将他们放入自己的类当中,而共同拥有的这些行为和属性我们可以通过继承来获得他们 。(1)子类中访问父类的成员

zm3rttqs9f的博客 2280

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java——继承和多态

上篇文章讲了类和对象,本篇就来讲述Java中的继承和多态,这两个也是非常重要的内容。以上就是继承和多态的内容了,希望大家看完之后能够对他们有更深入的了解。

2301_80817503的博客 1643

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JAVA继承和多态

JAVA继承和多态

Excuse_lighttime的博客 1461

java封装 继承 多态_Java 封装、继承、多态

Java 封装、继承、多态1.封装:封装的理解:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,并通过该类提供的方法来实现对隐藏信息的操作和访问。(简单的说就是隐藏对象的信息,留出访问的接口)。特点:1.只能通过规定的方法访问数据;2.隐藏类的实例细节,方便修改和实现。实现封装的方式:使用访问控制符:java提供了三种访问权限,准确的说还有一种是默认的访问权限,加上它一共四种。private...

weixin_39850331的博客 2954

Java 继承 多态

父类引用 子类对象不一样的时候,调用重写的方法,所表现出的行为不一样,这种思想————多态(大白话)不同对象的引用,调用同一个方法,产生的结果不一样————多态。

2401_83177222的博客 1335

Java继承和多态

Java中继承和多态的相关知识

m0_68814541的博客 925

C++中继承与多态和java中的继承与多态的区别

C++中继承与多态和Java中继承与多态的区别

suliangkuanjiayou的博客 1878

Java 封装、继承、多态的理解

更好的阅读体验:Java封装、继承、多态的理解 1.封装 封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。让使用者知道的才暴露出来,不需要让使用者知道的全部隐藏起来 封装的好处:避免使用者直接操作属性值,隐藏类的实现细节;让使用者只能通过程序员规定的方法来访问数据;可以方便的加入存取控制语句,限制不合理操作,提高程序安全性。 1.1.封装的实现 Java是使用“访问控制符”来控制哪些细节需要封装的,哪些细节需要暴露的。 Java中有4种访问控制符,分别为private,defaul.

持 开源思想,撰 必胜所学,望 勤学者,无难处 5954

继承和多态(JAVA)

将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用子类特有的方法,此时:将父类引用再还原为子类对象即可,即向下转换。由图可知,向下转型并不安全如下列代码Cat cat = new Cat("元宝",2);Dog dog = new Dog("小七", 1);// 向上转型// 向上转型// 程序可以通过编程,但运行时抛出异常---因为:animal实际指向的是狗。

HYY的博客 1104
上一篇: Java中的类和对象
下一篇: Java中两种比较接口和排序
Hacker鹿
博客等级 码龄5年 274粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值