Java基础漏洞(六)

news2024/11/15 8:04:34

巩固Java基础,基于韩顺平老师的课程,Java的封装、继承、多态、super()、this()、重载与重写的区别......,下面我们一点点来巩固练习。

(1)继承

继承细节1:子类无法继承父类的私有

                                                                       图1 

 我们定义一个父类father,里面有四个属性sample分别用public、protect、private、缺省四种修饰符来定义。用一个son去继承father。如图我们可以看见子类继承了父类所有属性和方法,但私有的却不能直接访问,如下例的sample4,如果要访问则用父类的公有方法去访问(设set和get方法)。

                                                                      图2

继承细节2:子类必须调用父类的构造器

 对于第二点:子类必须调用父类的构造器,创建每个子类时其实都会调用父类的构造器完成初始化,如果我们不写就会自动调用的默认构造函数,所有很多时候我们没有调用父类构造,并不是不调用也可以,而是不写它就会自动调用父类的默认构造函数。

                                                                         图3

 对于第三点我们继续举例说明:

如果我们在father中重载构造函数,在子类的构造函数中又没有调用则就会出现错误。有两种解决方法。

                                                                      图4 

 第一种方法,我们除了重载构造函数,还要加上默认的构造函数fathter()。

                                                                     图5 

 第二种方法:在子类的构造函数中用super调用父类重载后的构造函数 

                                                                    图6 

继承细节3:使用super的注意事项

对于第四点较为简单,在子类中想调用父类的构造器则直接用super即可。

                                                                  图7 

对于第五点,super必须在函数的第一句 ,否则就会报错。

                                                                  图8 

 对于第六点,super()和this()语法都要放在构造函数的第一句,所有super()和this()不能同时出现。

                                                                    图9 

继承细节4:object是所有类的父类

                                                                     图10 

继承细节5:一个父类可对应多个子类,但一个子类只能对应一个父类

在继承关系中,我们要注意is-a的逻辑关系,一个父类可以有多个子类,但一个子类只能对应一个父类。如同一个父亲可以有多个孩子,但是每个孩子都只能对应一个父亲。

                                                                   图11

(2)super的语法

                                                                   图12 

 在子类的方法中,我们可以用super去访问父类的属性或者是方法,但需要注意的是私有的属性和方法是无法访问到的。

                                                                    图13 

(3)super和this的比较

                                                                   图14 

(4)多态:对象的多态

 多态细节1:编译类型和运行类型

                                                                   图15 

 我们结合例子来说明情况,我们先定义父类为Aniaml,两个子类分别为Dog、Cat。在main函数中分别new三个animal对象,在例子中的animal1和animal2编译类型都是Animal对象,运行类型却为两个子类。可以得出编译类型和运行类型可以不一致,编译类型一旦定义就不能改变,但运行类型可以变化。

                                                                    图16 

 多态细节2:向上转型

                                                                  图16 

                                                                   图17 

 结合例子(图17),Animal为父类,Dog和Cat为子类。特别需要注意的是,利用向上转型时,当一个方法同时存在于父类和子类时(重写),调用该方法会遵循就近原则(图18)(例子图19),也就是调用子类的该方法,没有再向上层父类寻找。

                                                                     图18 

                                                                    图19

 当使用向上转型的时候的时候,如果一个方法只存在于子类而不存在于父类,则无法调用。必须同时存在于父子类才能调用。

                                                                     图20

 多态细节3:向下转型

                                                                      图21

通过上面向上转型的学习我们可以知道,向上转型编译类型为父类,运行类型为子类,无法调用子类的所有方法。利用向下转型我们可以调用子类的所有成员(图22)。

                                                                       图22

 (5)方法的重载和重写

重载和重写的区别还是有很多的,如下图。

                                                                        图23

特别需要注意的是:

(1)重载的参数列表是不同的,而重写则必须相同

(2)重写的返回类型子类型要和父类型一致或者是父类型其子类(小于等于)

                             

                                 父子类返回类型相等

                                                    图24

               

                          子类返回对象为父类的返回对象的子类

                                                 图25

 (3)重写中子类的修饰符访问范围不能比父类小(大于等于)

                                 子类修饰符范围和父类修饰符范围相同               

                                                  图26

                                子类修饰符范围比父类修饰符范围大

                                                  图27 

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

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

相关文章

Ansys Zemax | 利用 TrueFreeForm 面进行网格自由曲面的优化

在这篇文章中,我们将演示如何使用 OpticStudio 的 TrueFreeForm 面,设计AR/VR设备中的人眼追迹系统(eye-tracking subsystem),这个系统通常位于装置的楔形透镜结构中。此外,为了完成子孔径(sub-…

JSBridge:混合开发中的双向通信[Android、iOSJavaScript]

什么是WebView WebView 是移动端中的一个控件,它为 JS 运行提供了一个沙箱环境。WebView 能够加载指定的 url,拦截页面发出的各种请求等各种页面控制功能,JSB 的实现就依赖于 WebView 暴露的各种接口。 由于历史原因,IOS以8为分界…

【Java AWT 图形界面编程】事件处理机制 ② ( Frame 窗口事件监听器 WindowListener | 代码示例 )

文章目录一、Frame 窗口事件监听器 WindowListener二、Frame 窗口事件监听器 WindowListener 代码示例一、Frame 窗口事件监听器 WindowListener 在 AWT 中 , 为 Frame 窗口 添加 窗口事件监听器 WindowListener , 可以监听窗口的操作 , 如 : 窗口显示 WindowListener#windowO…

leetcode 1626. Best Team With No Conflicts(最佳无冲突团队)

scores数组中是每个队员的得分,ages数组中为对应队员的年龄, 现在要从这个队里挑选出一些队员,使总得分最高, 挑选时年龄大的要比年龄小的score更高(严格大于),才不会产生冲突。 返回最高的得分…

【nestjs+VueJs全栈】- 后端搭建和数据库抽离

先补充一些nestjs的前置知识 控制器 控制器负责处理传入的请求和向客户端返回响应。 控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。通常,每个控制器有多个路由,不同的路由可以执行不同的操作。 为了创建一个基本的控制器…

React 组件基础

文章目录1. React 组件的两种创建方式1 使用函数创建组件2 使用类创建组件3 抽离为独立 JS 文件2. React 事件处理1.事件绑定2 事件对象3. 有状态组件和无状态组件4. 组件中的 state 和 setState1 state的基本使用2 setState()修改状态从 JSX 中抽离事件处理程序5.事件绑定 thi…

Python初学如何逆袭高手?22个万能公式汇总大全

嗨害大家好鸭!我是小熊猫~ 本篇文章共22个万能公式~ 初学者友好~ 源码资料电子书:点击此处跳转文末名片获取 1、一次性进行多个数值的输入 对于数值的输入问题, 是很多笔试题目中经常遇到的问题, 一次性输入多个参数值 , 可以节…

AppiumDesktop学习总结

Appium学习总结 文章目录Appium学习总结一、简介二、环境准备1.下载并配置安卓SDK环境变量2.下载及安装AppiumDesktop3.安装AppiumDesktop4. 启动AppiumDesktop5.安装Python3.x环境6.安装Appium的Python客户端7.安装安卓模拟器8.安装被测APP:9.连接安卓设备三、运行…

NCRE二级 《MS Office高级应用》备考之路

文章目录一、WORD一、易考点二、解题思路二、EXCEL一、易考点二、解题思路三、PPT一、易考点二、解题思路四、其他一、WORD 一、易考点 1.设置页边距、纸张方向、纸张大小、装订线位置,分栏。 2.设置主题、页面边框、添加水印。 3.设置段间距、行间距、特殊格式&…

MySQL从入门到精通(第一篇):MySQL的基本语法及其设计,结合多篇文章

MySQL目录一、数据库入门1. 数据管理技术的三个阶段2. 关系型数据库与非关系型数据库3. 四大非关系型数据库a. 基于列的数据库(column-oriented)b. 键值对存储(Key-Value Stores)c. 文档存储(Document Stores&#xff…

【日志首次上报积分最多】

题目描述 【日志首次上报最多积分】 日志采集是运维系统的的核心组件。日志是按行生成,每行记做一条,由采集系统分批上报。 如果上报太频繁,会对服务端造成压力;如果上报太晚,会降低用户的体验; 如果一次上报的条数…

【flyway入门及使用】解决生产环境sql更新遗漏

flyway入门及使用 一、简单介绍 flyway开源的数据库版本管理工具 二、为什么要使用flyway 1.自己写的sql没有在全部环境执行 2.别人写的sql没有在全部环境执行 3.有人修改了已经执行过的SQL,期望再次执行 4.需要新增环境做数据迁移 三、flyway是如何工作 1…

雷达流量计的安装方法与应用方向介绍

1、设备介绍 雷达流量计是一种采用微波技术的水位流速探测仪器,结合了成熟的雷达水位计和雷达流速仪的测量技术,主要应用于江河、水库闸口、地下水道管网、灌溉渠道等明渠水位流速测量。该产品可有效地监控水位流速流量变化状态,为监测单位提…

【ThreeJs 初学习】随机三角形的实现方案

随机三角形的实现方案 根据官网的文档整理出一份API文档, 地址是:ThreeJs 官网文档,其目的还是为了方便查阅 下列代码源码地址 上述的截图 就是大致的实现效果。 实现内容 首先我们需要对法向量 以及如何完成一个面有一定的了解,具体了解的内…

Opencv-DNN模块之官方指导:利用DNN模块实现深度学习应用:分类、分割、检测、跟踪等

本文根据 Deep Learning with OpenCV DNN Module: A Definitive Guide 中相关内容进行翻译整理而得,用于今后的学习和工程。 00 前  言 ---   机器视觉研究领域从上个世纪六十年后期就已创立。图像分类和物体检测是计算机视觉领域中的一些最古老的的问题&#x…

CSS - 实现Loading加载动画

Loading加载动画 用CSS都用实现一个loading的加载动画 通过控制 item-loader-container 来实现显示及隐藏 <div class"item-loader-container" id"item-loader-container"><div class"la-ball-running-dots la-2x"><div></…

TVS二极管6.6SMDJ58A/6.6SMDJ58CA参数,有什么区别?

提及6600W高功率TVS二极管&#xff0c;电子工程师们更多想到的可能是DO-218AB封装SM8S系列汽车级瞬态抑制TVS二极管&#xff0c;关于SM8S系列TVS管这方面的知识&#xff0c;之前科普过好多次了。接下来&#xff0c;TVS保护管厂家东沃电子要科普的是另一款6600W的二极管6.6SMDJ系…

最优化问题

一&#xff0c;最优化问题 http://faculty.bicmr.pku.edu.cn/~wenzw/optbook/opt1.pdf 最优化问题&#xff08;也称优化问题&#xff09;泛指定量决策问题&#xff0c;主要关心如何对有限 资源进行有效分配和控制&#xff0c;并达到某种意义上的最优。 最优化问题一般可以描…

算法之美~递归

递归求解问题的分解过程&#xff0c;去的过程叫“递”&#xff0c;回来的过程叫“归”。eg.电影院第几排&#xff1f;f(n) f(n-1) 1 其中,f(1) 1根据递推公式&#xff0c;实现递归代码public int f(int n) {if (n 1) return 1;return f(n-1) 1; }递归需要满足的三个条件一…

2023年谷歌搜索排名规则揭秘,Google排名机制

本文主要分享关于2023年谷歌排名算法的一些机制以及如何操盘才能更好的获取谷歌的自然排名。 本文由光算创作&#xff0c;有可能会被修改和剽窃&#xff0c;我们佛系对待这种行为吧。 要把谷歌排名做起来&#xff0c;你得了解谷歌的排名算法。 Google排名机制是怎么样的&…