继承,多态,封装以及对象的打印

news2024/11/15 8:05:15

前言:

我们都知道Java是一种面向对象的编程语言,面向对象语言的三大特性就是继承,多态,封装,而这些特性正好的Java基础的一个主体内容。在学到这之前,我们肯定已经学习过了类和对象,所以这部分的内容相当于是对类的一个“进阶”。

1.继承

什么是继承?继承就是对类的共同特性的提取!!!(提高对代码的复用率)比如现在有一只宠物狗(Dog)和一只宠物猫(Cat),它们都有姓名和年龄,然后都会睡觉都会吃饭,这就属于说是它们的共同特性,此时我们就可以把这些特性单独打包封装到一个类(叫做动物:Animal)中,然后让这个宠物狗和这个宠物猫就能够继承(用到关键字:extends)动物(Animal类)类,然后它们就有了姓名和年龄,然后也可以有吃饭和睡觉这个动作(如果想要实现不一样的吃饭和睡觉的这个动作,可以在子类中重写这个方法,这样子类就有自己独特的睡觉或者吃饭动作,关于什么是重写,后面会介绍),如果后续再来一个其他的动物,比如说小白兔就可以直接继承这个Animal类,此时这只小白兔就拥有了这个Animal类中的所有属性(包括成员变量和成员方法)。

上述过程用代码实现:

Animal类:(父类)

Dog类:(子类1)

Cat类:(子类2)

在子类中我们可以看到黄色字体:@Override ==> 重写,这一串字符就表示下面这个方法是重写的。它能够对重写的那个方法进行合法性校验,以来检验这个重写的方法是否写错。

1.1 继承的语法

class 子类名称 extends 父类名称

使用过程中需要注意的事项:

(1)变量的作用域:

        1)如果子类与父类没有重复的变量,那么在子类中有的则使用子类中的变量,没有则会用从父类继承下来的变量。方法同样

        2)如果子类与父类有相同的变量,但变量初始化的值不同,则优先用自己(子类)的(就近原则)。方法同样

        3)如果想要访问父类中的方法或者变量,则会用到super关键字,super.成员方法/super.成员变量。

(3)非继承关系中代码块的执行顺序:

        1)静态的先执行(如果都是静态的,比如静态方法,静态代码块,静态成员方法和变量,此时就要看定义时候的顺序了)

        2)非静态的再执行(如果都是非静态的,比如实例代码块,定义的非静态成员变量和成员方法,此时就要看定义的顺序了)

        3)对应的构造方法最后执行

(3)继承关系中代码块的执行顺序:

        1)父类的静态代码块和子类的静态代码块先执行。(只执行一次,后续再new相同对象的时候不会再执行一遍)

        2)父类的实例代码块和构造方法然后紧接着执行

        3)子类的实例代码和构造方法然后再执行

(4)关于private的问题:

如果父类中有变量是被private修饰的,这个变量也是可以被继承的,但是不能直接进行访问,必须通过父类提供的getter和setter方法来访问该变量,否则将没法访问该变量!!!

(5)继承不能是不能够多继承的,只能单继承,如果想要实现多个继承的这种关系,可以用接口来实现,接口是支持一个类实现多个接口的。

        

1.2 重写与重载

(1)重写:

方法名,返回值类型,参数类型和个数都不能发生改变,只有方法体内部的具体实现发生改变,这部分就是你写自己想要实现的内容,一般在继承和接口中使用。

父类Animal中的eat方法:

子类Cat中的重写的eat方法:(实现了Cat独一份的eat方法)

这个重写就好比如说是苹果公司开发某个新的手机,它得沿用它之前已经开发好的一些操作系统之类的,只需要再这个基础上添加一些新的东西就成了一个新类型的手机,然后就可以拿出来卖了。

ps:

*被final,private,static修饰的方法,都不能被重写。

*被重写的方法的访问限定修饰符在子类中必须大于等于父类。

(2)重载:

返回值不同或者方法参数个数不同,但方法名相同。需要注意一种情况:返回值相同,参数个数相同,方法名也相同,但每一个参数类型不同,这种情况不是重载。

现实现两种加法(仅仅参数类型不同):

此种情况会在编译器上直接报错!!!

1.3 super关键字

super通常有三种用法:super.成员变量;super.成员方法;super()(这个跟this()的作用差不多)

对于前两种用法,都是用来访问父类的变量或者方法,都只能在非静态方法中使用。

对于第三种用法:

(1)super()表示调用父类的构造方法,帮组父类的成员变量进行初始化,一旦一个类继承了某一类就必须先帮组父类进行构造,然后才是自己构造。(如果父类有构造方法,那么子类中是一定要有构造方法的,否则会报错;但如果父类没有构造方法,那么Java会默认提供一个无参构造方法,此时super()可写可不写,因为编译器会默认提供一个,此时如果想要在子类中对父类的变量进行初始化,可以通过super. 来帮助初始化)

父类(Animal)中有构造方法:

子类(Dog)中有构造方法:(没有报错)

子类(Cat)中没有构造方法:(出现报错)

(2)super()跟this()一样,都只能在构造方法中使用,并且必须是构造方法中的第一句,且他俩不能同时存在

ps:super只能指代自己的直接父类,不能够指代父亲的父亲甚至往上。

2.多态

什么是多态?多态就是完成某个行为的时候,当不同的对象去完成所产生的状态不同。也就是说,当父亲的引用,引用的子类对象不同时,调用这个重写的方法,所表现出来的行为是不同的。

举个例子:现有一个场景是在学校食堂打饭的场景,现在前面排了很多人,如果这时候一个长得不错的女生走前来询问你(是个男生)能不能给她掐个队(虽然这个行为不好,但是她长得漂亮),那你肯定就会同意的哇,但要是个男生上来询问你能不能掐队,那肯定就是不能!!!由此可以看出如果是发生了多态,那么不同对象去完成某个行为的时候所产生的状态是不同的。

2.1 动态绑定

谈到多态就会谈到动态绑定,动态绑定是多态的基础。那什么是动态绑定呢?就是在运行时编译器才确定到底要执行哪一个方法,编译时和运行时确定执行的方法不同。

而动态绑定又有三个条件:

  1)向上转型:子类的对象给到父类的引用。有很多种方式能够引发向上转型:这里采用直接赋值,还有返回值向上转型和传参的时候发生向上转型。一般来说都是采用直接赋值发生向上转型。

比如:Animal为父类,Dog为子类

  2)子类必须重写与父类同名的方法。

  3)通过父类对象的引用来调用子类中重写过后的方法。

满足以上三个条件,我们就说此时发生了多态(动态绑定)。

3. 封装

要实现封装,则必须要被private这个限定访问修饰符所修饰,private表示你只能在当前类中使用成员变量和成员方法,出了这个类就不能使用了。

其他限定访问修饰符:

(1)default:使用范围:同一个包中的同一个类和同一个包中的不同类中。

(2)protected:使用范围:同一个包中的同一个类,同一个包中的不同类中和不同包中的子类

eg:在类1(demo1这个包里面)中有一个a变量是被protected修饰的,类2(demo2这个包里面)要想使用这个变量a就必须继承类1,否则使用不了。

(3)public:使用范围:所有地方都可以使用,它是范围最大的修饰符。

4. 对象的打印

对象的打印用到toString方法。

我们首先需要知道Java里面所有的类都是默认继承于Object类,而在Object中实现的toString方法是这样的:

默认打印是对象在堆上创建的一个地址。

例如:现创建了一个Dog对象,然后直接打印dog这个对象

其次需要知道,当我们对对象进行打印的时候,会默认调用toString方法(所以我们不需要再用对象.toString()来调用这个方法),如果没有进行重写这个toString方法,那么则会调用Object中的toString方法。

所以如果想要获得你想要的对象打印内容,就需要你在创建一个类的时候,重写这个toString方法,这样我们就可以获得我们所想要的内容。

此时再进行对象的打印就是你所想要的内容了。

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

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

相关文章

白酒:低酒精度白酒的消费特点与市场前景

低酒精度白酒的消费特点与市场前景是酒类市场的一个重要话题。随着品质意识的提高和消费者口味的多样化,低酒精度白酒逐渐受到越来越多的关注。云仓酒庄豪迈白酒作为白酒的品牌之一,其消费特点和市场前景值得深入探讨。 首先,从消费特点来看…

SQLserver - 笔记

1 SQLserver - 用户管理 4、SQL SERVER数据库用户管理_哔哩哔哩_bilibili 创建用户 - user 2.选择用户,修改属性

MIRO时,修改页签“采购订单参考”的数量时,金额不自动计算

MIRO 发票校验时,进入到如下界面,系统参考采购订单自动带出已经收货的金额和数量。 此时如果想要修改数量时,有些用户账号下,金额不自动计算,但是有些用户账号下,数量更改时,系统自动计算和建议…

互联网上的IP地址定位的应用及意义

在当今高度互联的数字时代,IP地址定位技术发挥着重要作用,帮助企业、机构和个人在多种应用场景中提高效率、保障安全和优化服务。IP数据云将深入探讨IP地址定位技术的具体应用及其实际意义。 什么是IP地址定位? IP地址定位IP数据云 - 免费IP…

效率提升80%!苏州金龙国际贸易数字提单试点成功

日前,江苏苏州自贸片区基于星火链网融合型基础设施和通商互信(TradeTrust)标准的数字提单试点成功,该批数字提单业务为苏州金龙客车对菲律宾的整车出口,由全球最大的集装箱运输公司马士基承运。随着车辆的成功交付&…

搭建Kubernetes v1.20二进制集群——单Master和Node组件

前言 本文将介绍如何使用二进制文件手动搭建 Kubernetes v1.20 集群。通过这种方法,我们可以更好地理解 Kubernetes 的内部工作原理,并具备更大的灵活性和控制权。下面将逐步构建 Kubernetes 集群,并进一步了解其各个组件之间的交互和配置。…

Ardupilot Rpanion 4GLTE 网络性能测试 - 国内中转

Ardupilot Rpanion 4GLTE 网络性能测试 - 国内中转 1. 源由2. 视频效果2.1 整体刷新率不高2.2 网络延迟可接受2.3 带宽增加丢包明显2.4 实测效果流畅 3. 总结 1. 源由 上一次,由于ZeroTier使用了国外服务器,延迟~ 569 ms,花屏、卡顿。 本着…

如何在湖师大官网找到考研真题

今天学弟问我怎么找真题,我必须告诉他怎么找湖师大的真题,身为考研学子,这是必须要知道滴,尤其是自命题,是吧,话不多说,言归正传,我们开始吧! 1 打开湖师大官网 什么&a…

酷开科技不断赋能电视,致力于为消费者带来更好的娱乐体验!

在这个快节奏的现代社会,我们总是忙忙碌碌奔波在外,期冀找寻一份温馨和陪伴,但与其在外寻寻觅觅不如把目光放回到身边来,或许在家里你也能收获一份安宁与陪伴呢! 人类不断增长的信息、心理和感官需求是媒体发展进步的…

4-1 综合应用延申:RYU北向接口的应用实现案例

ryu控制器在SDN三层架构中是处于中间层,(如图1) 图1 SDN三层架构 如何实现与应用层的通信,如图1所示,实现RYU控制器与应用层(如开发应用web界面时数据可视化平台)数据通信就需要利用SDN的北向…

智能文档处理:解析文档场景下多模态大模型的应用与研究前沿

解析文档场景下多模态大模型的应用与研究前沿 一、TextIn 文档解析技术1. 现有大模型文档解析问题2. 文档解析技术背景3. TextIn 文档解析技术架构4. 版面分析关键技术 Layout-engine 二、TextIn 文本向量化技术三、TextIn.com Text Intelligence 一、TextIn 文档解析技术 hell…

Linux系统 -目录结构与配网

目录的特点 Windows中有C盘、D盘等,每个都是一个根系统是个多根系统 Linux中只有一个根是个单根系统 Linux-目录存储的内容 1、/root:管理员的家目录 2、/home:存储普通用户家目录的目录/3、/tmp:临时目录,这个目录存储…

【二叉树】(二)二叉树的基础修改构造及属性求解1

(二)二叉树的基础修改构造及属性求解1 翻转二叉树递归实现迭代实现(深度遍历)层序实现(广度遍历) 对称二叉树递归实现迭代实现(非层序遍历) 二叉树的最大深度递归法迭代法&#xff0…

欢乐钓鱼大师攻略大全,新手钓鱼入坑必备攻略!

《欢乐钓鱼大师》是一款深受玩家喜爱的钓鱼手游,在游戏中,玩家可以通过升级和更换鱼竿来享受钓鱼的乐趣,并有机会钓到各种稀有鱼类。然而,很多玩家在闯关过程中遇到了不少困难。为了帮助大家更好地掌握游戏技巧,小编特…

量化交易策略:经典量化交易策略大汇总(内附开通方法)

01、什么是量化交易? 量化交易是一种依赖于先进的数学模型和计算机技术的交易方式,旨在制定能带来超额收益的多种“大概率”事件策略。 这个过程从大量的历史数据中筛选,极大地减少了投资者情绪波动的影响,避免了在市场极度狂热或…

关于FIFO Generator IP和XPM_FIFO在涉及位宽转换上的区别

在Xilinx FPGA中,要实现FIFO的功能时,大部分时候会使用两种方法: FIFO Generator IP核XPM_FIFO原语 FIFO Generator IP核的优点是有图形化界面,配置参数非常直观;缺点是参数一旦固定,想要更改的化就只能重…

【大数据】计算引擎MapReduce

目录 1.概述 1.1.前言 1.2.大数据要怎么计算? 1.3.什么是MapReduce? 2.架构 3.工作流程 4.shuffle 4.1.map过程 4.2.reduce过程 1.概述 1.1.前言 本文是作者大数据系列专栏的其中一篇,专栏地址: https://blog.csdn.ne…

AI交互数字人赋能农业数字化、智能化推广营销

2024陵水荔枝文化节上“数字新农人”陵小荔身着黎族服饰、佩戴银器亮相开幕式现场,AI交互数字人生动地以互动式推介和歌舞等形式,带领宾客们了解陵水荔枝的发展历程、产业布局、未来愿景等。如今,越来越多农产品品牌通过3D虚拟数字人定制&…

声纹识别的对抗与防御

随着机器学习理论和方法的发展, 出现了用于模仿特定说话人语音的深度伪造、针对语音识别和声纹识别的对抗样本, 它们都为破坏语音载体的可信性和安全性提供了具体手段, 进而对各自应用场景的信息安全构成了挑战。 深度伪造是利用生成式对抗网络等方法, 通过构建特定的模型, 产生…

用HAL库改写江科大的stm32入门例子4-1 OLED

大体 步骤: step1:使用STM32CubeMX初始化I2C1,生成初始化代码 step2:将任意一个库导入到工程,配置好编译路径 step3:调用函数即可 IIC原理图: 接线图: 先设置clock: 开…