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

前言:

我们都知道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.mzph.cn/pingmian/12762.shtml

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

相关文章

光学镜片镀膜上下料设备

在现代化工业生产的浪潮中,智能化、自动化已成为提升生产效率、降低成本的关键所在。特别是在精密制造领域,对于设备的高精度、高效率要求更是严苛。今天向大家推荐一款引领行业潮流的智能设备——富唯智能镀膜上下料设备。 产品介绍 实现功能 单面镀膜…

NGINX SPRING HTTPS证书

服务器:xxx.xxx.xxx.56 客户端器:xxx.xxx.xxx.94##生成服务器证书和密钥容器 keytool -genkey -alias tas-server -keypass 250250 -keyalg RSA -keysize 2048 -validity 3650 -keystore D:\https证书\tas-server.jks -storepass 250250 -dname "C…

低成本创业分享,一个不用自己囤货、进货、直播的项目|抖音小店

大家好,我是喷火龙 在抖音上面开店,不仅可以卖自己的商品,还可以卖别人的商品赚差价, 并且不需要你囤货、进货、直播、剪视频,也不需要有粉丝。 这个项目就是抖音小店无货源。 很多朋友对抖音小店无货源模式的玩法…

tensorrtx-yolov5-v6.0部署在windows系统

前言:最近几天一直在搞这个东西,现在跑通了,为了以后自己看和帮助他人,就记录一下。虽然是跑通了但是觉得怪怪的,感觉不是自己想要的效果,另外这个只能检测图片,不能摄像头实时监测(我暂时没找到…

springsecurity项目快速搭建

自定义security的搭建 package com.sangeng.config;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;Co…

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

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

【driver6】debugfs,性能优化,

文章目录 1.内核调试手段:debugfs.h中api建立目录/sys/kernel/debug2.性能优化:裸磁盘无法使用,一般都刷文件系统。驱动加上要考虑磁盘io,内存占用,cpu使用情况3.Valgrind内存泄漏排查案例:4.cpu瓶颈&#…

英语学习笔记10——Look at ...

Look at … 看…… 词汇 Vocabulary fat adj. 胖的,丰富的 n. 脂肪 例句:他是个胖男孩。    He is a fat boy. 搭配:fat cat 有钱人,土豪 woman n. 女人 girl n. 女孩 madam n. 女士 man n. 男人 boy n. 男孩 sir n. 先生 …

云飞云共享云桌面如何降低电脑投入成本?

云飞云共享云桌面作为一种创新的云计算解决方案,以其独特的优势在业界赢得了众多认可。其中,它极大地降低了电脑投入成本,为企业和个人用户带来了实实在在的经济效益。那么,云飞云共享云桌面是如何实现这一点的呢? 设…

Python 机器学习 基础 之 监督学习/分类问题/回归任务/泛化、过拟合和欠拟合 基础概念说明

Python 机器学习 基础 之 监督学习/分类问题/回归任务/泛化、过拟合和欠拟合 基础概念说明 目录 Python 机器学习 基础 之 监督学习/分类问题/回归任务/泛化、过拟合和欠拟合 基础概念说明 一、简单介绍 二、监督学习 三、分类问题 四、回归任务 五、泛化、过拟合和欠拟合…

全面提升数据采集效率:IP代理产品的应用与评估详解

全面提升数据采集效率:IP代理产品的应用与评估详解 文章目录 全面提升数据采集效率:IP代理产品的应用与评估详解背景应用场景:平台首页信息抓取准备评测素材详细的产品使用和评测流程产品介绍亮数据的IP代理服务亮数据的爬虫工具及采集技术 注…

2024网上可申请离婚,无需对方同意!

🎃很多客户决定离婚之后却因为不了解离婚流程没准备好所需材料,导致离婚失败,或者无故被对方e意拖延,无计可施,无可奈何! 🎃别怕,2024年离婚新规定已发布,离婚变的简单了…

OpenAI新模型GPT-4o“炸裂登场” 响应速度堪比真人 关键还免费!

GPT-4o模型基于来自互联网的大量数据进行训练,更擅长处理文本和音频,并且支持50种语言。更值得一提的是,GPT-4o最快可以在232毫秒的时间内响应音频输入,几乎达到了人类的响应水平。 GPT-4o有多“炸裂”?核心能力有三 G…

点量云流3D应用线上展厅云推流方案分享

展厅是企业对外展示宣传的窗口,不论企业还是政fu单位、博物馆、科技馆,展厅都可以给用户一个更直观的感受。而随着技术的发展,展厅展示的内容也从最初的图文、视频,扩展更多文件类型,比如PPT\PDF文件以及3D应用数字孪生…

【文末附gpt升级方案】腾讯混元文生图大模型开源:中文原生Sora同款DiT架构引领新潮流

在人工智能与计算机视觉技术迅猛发展的今天,腾讯再次引领行业潮流,宣布其旗下的混元文生图大模型全面升级并对外开源。这次开源的模型不仅具备强大的文生图能力,更采用了业内首个中文原生的Sora同款DiT架构,为中文世界的视觉生成领…

uniapp使用地图开发app, renderjs使用方法及注意事项

上次提到uniapp开发地图app时得一些问题,最后提到使用renderjs实现app中使用任何地图(下面将以腾讯地图为例,uniapp中写app时推荐使用得是高德地图,无法使用腾讯地图(renderjs方式除外))。 1、…

泰盈科技IPO终止:客户集中度高,业绩未达目标,高管薪酬较高

近日,上海证券交易所披露的信息显示,泰盈科技集团股份有限公司(下称“泰盈科技”)及其保荐人中金公司撤回上市申请文件。因此,上海证券交易所决定终止对该公司首次公开发行股票并在主板上市的审核。 据贝多财经了解&am…

企智汇项目管理软件有哪些优势?

一款非常好用、高效的软件——企智汇软件有哪些优势呢? 首先,我们来看看它的界面设计。企智汇软件界面简洁直观,用户可以轻松地使用各种功能,不需要学习复杂的操作流程。而且,软件还提供了多种配色方案和主题&#xf…

嵌入式学习72-复习(字符设备驱动框架)

编辑 drivers/char/Kconfig 为了在make menuconfig是能够显示出我们写的驱动程序 make menuconfig 编辑 drivers/char/Makefile 才是真正把编写好的源文件加入到编译中去 make modules cp drivers/char/first_driver.ko ~/nfs/rootfs/

什么是ARP攻击,怎么做好主机安全,受到ARP攻击有哪些解决方案

在数字化日益深入的今天,网络安全问题愈发凸显其重要性。其中,ARP攻击作为一种常见的网络攻击方式之一,往往给企业和个人用户带来不小的困扰。ARP协议是TCP/IP协议族中的一个重要协议,负责把网络层(IP层)的IP地址解析为数据链路层…