JAVA基础进阶(一)

news2024/11/29 2:39:31

一、什么是继承

把相同的属性和行为抽离出来放到父类,再让子类使用extends关键字继承父类后,就可以直接使用父类公共的属性和方法了,提高了代码的复用性可以降低重复代码的书写。

子类既有自己类的属性和行为,也有父类的属性和行为。

二、继承的注意事项

  1. 只能单继承,一个子类只能有一个父类,不能有多个父类。
  2. 可以多层继承,子类的父类也可以有父类(子类的爷爷类)。
  3. 子类可以继承“祖宗类”的成员变量和成员方法(爷爷类、爷爷类的父类....等)。
  4. 私有成员变量也可以继承,但是不能直接访问,可以间接访问。
  5. 构造方法不能继承,但是子类可以调用父类的构造方法,父类构造方法不能用于创建子类对象。
  6. 在子类方法中访问成员遵循就近原则:先找子类,再找父类,父类找不到就报错。
  7. 子类重写父类方法时,私有方法不能被重写。

三、继承注意事项的理解 

对于第3点,子类可以继承父类、“爷爷类”、“爷爷类的父类......”的成员变量和成员方法。说通俗点,子类可以继承“祖宗类”所有的成员变量和成员方法。

对于第4点,私有成员变量是用private修饰的,所以它的访问范围只在本类中,所以子类当然不能直接访问,但是可以通过public修饰的set、get方法间接访问到私有成员变量。

代码演示:

Boy继承了Man

Man中有私有成员变量name,以及用public修饰的set、get方法。

Test1类中创建Boy对象,并用Boy对象访问成员变量name,发现编译报错:name has private access in ...... MAN。

但是可以通过public修饰的set、get方法间接访问到私有成员变量。

对于第5点

子类不能继承父类的构造方法,只能调用父类的构造方法。

子类的无参构造和有参构造都是默认会调用父类的无参构造,要想子类的有参构造调用父类的有参构造,加上super(参数1,参数2),就会调用父类的有参构造,就不再调用父类的无参构造。

如果父类中不存在无参构造器,也不存在有参构造器,是不会报错的,因为类会默认存在一个无参构造器。

如果父类不存在无参构造器,但是存在有参构造器,就会报错。因为子类的无参构造和有参构造都是默认会调用父类的无参构造,此时类也不会默认存在一个无参构造器,所以会报错。

演示一:父类中只存在有参构造会报错,因为子类的无参构造、有参构造默认会调用父类的无参构造。

父类中只存在有参构造

子类就会报错

演示二:如果子类中只存在有参构造,不存在无参构造,就不能使用子类的无参构造创建子类的对象。因为构造方法,都是用类名()、类名(参数1、参数2)这样的,子类和父类的名字不一样,所以构造方法不能继承,就不能使用父类的无参构造创建子类的对象。

子类Boy中只存在有参构造

父类中无参构造、有参构造都有

此时无法创建子类的无参构造对象

演示三:子类的无参构造和有参构造都是默认会调用父类的无参构造

子类中创建有参构造器和无参构造器:

父类中创建有参构造器和无参构造器:

Test1中使用无参构造创建子类对象

发现首先调用了父类的无参构造,再调用子类的无参构造。

Test1中使用有参构造创建子类对象

同样发现首先调用了父类的无参构造,再调用子类的有参构造。

子类的有参构造器中加上super(参数);

再在Test1中使用有参构造创建子类对象,发现首先调用了父类的有参构造,再调用子类的有参构造,此时不再调用父类的无参构造。

继承中构造方法总结:

1、构造方法不能继承,但是子类可以调用父类的构造方法,父类的构造方法不能用于创建子类对象。

2、子类的无参构造和有参构造都是默认会调用父类的无参构造

3、要想子类的有参构造调用父类的有参构造,加上super(参数1,参数2),就会调用父类的有参构造,就不再调用类的参构造

4、如果父类中不存在无参构造器,也不存在有参构造器,是不会报错的,因为类会默认存在一个无参构造器。

5、如果父类不存在无参构造器,但是存在有参构造器,就会报错。因为子类的无参构造和有参构造都是默认会调用父类的无参构造,此时类也不会默认存在一个无参构造器,所以会报错。

6、this();super();只能存在于构造方法的第一行,所以不能同时存在。

四、Idea中查看继承关系

4.1 Idea中查看子类的所有父类

这样就能很直观的展示一个类所有的父类

4.2 Idea中查看父类的所有子类

4.3 Idea中展示父类的所有子类

展示子类的所有父类

这种方式和4.1的效果一样,但是没有4.1更加直观!

参考网址:

IntelliJ IDEA 中如何查看一个类的所有继承关系,包括父类与子类 | 骐晔

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

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

相关文章

两个mongo表,A和B,以A中的_id记录的为准, 删掉B表中A表中没有的记录

可以使用 MongoDB 的聚合管道和 $lookup 操作符来实现这个需求。以下是一个示例的查询语句,假设集合 A 和集合 B 分别对应表 A 和表 B: db.B.aggregate([{$lookup: {from: "A",localField: "_id",foreignField:

双十二有什么好物是值得推荐?智能家居好物推荐

都知十一月份跟十二月份都有两个大促的时间,那就是双十一跟双十二,距离双十一过去已经半个月了,是不是还有很多朋友在双十一的时候也没有买尽兴,别慌!错过了双十一咱还有双十二,双十二的优惠力度也不会低于…

Day44力扣打卡

打卡记录 给小朋友们分糖果 II(容斥原理 隔板法) 链接 def c2(n):return n * (n - 1) // 2 if n > 1 else 0class Solution:def distributeCandies(self, n: int, limit: int) -> int:return c2(n 2) - 3 * c2(n - limit 1) 3 * c2(n - 2 * …

Git 是一种分布式版本控制系统常用指令

Git 是一种分布式版本控制系统,用于跟踪文件的变化并协同多人在同一个项目中进行开发。以下是一些常用的 Git 指令和它们的使用介绍: 1. 初始化一个新仓库 git init 用途:在当前目录初始化一个新的 Git 仓库。使用:在项目根目录执…

Istio新架构揭秘:环境化Mesh

自问世以来,Istio因其使用Sidecar(可编程代理与应用容器一同部署)而备受认可。这种架构选择使Istio用户能够享受其好处,而无需对其应用进行 drast 改变。这些可编程代理,与应用容器紧密部署在一起,因其能够…

进入最后倒计时!就在深圳福田明天上午9点正式开幕!不容错过!

会展中心介绍 深圳会展中心交通快捷便利,南邻滨河快速干道,与口岸、港口及高速公路相连,驾车驱往深圳火车站仅需15分钟、深圳机场仅需30分钟。地铁1号、4号线在会展中心站接驳,通过市政地下通道可从馆内直达地铁站,仅需…

Paragon NTFS16Mac读写外置移动硬盘专业工具

Paragon NTFS for Mac16是一款非常不错的Mac读写工具,解决了大部分Mac电脑用户无法读取移动硬盘的困扰,Paragon NTFS for 16版一直是Mac OS平台上最受欢迎的NTFS硬盘格式读取工具,有了NTFS for Mac ,安装了双系统的Mac用户可以在O…

Redis基本操作及使用

📑前言 本文主要是【Redis】——Redis基本操作及使用的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一…

线性可分SVM摘记

线性可分SVM摘记 0. 线性可分1. 训练样本到分类面的距离2. 函数间隔和几何间隔、(硬)间隔最大化3. 支持向量 \qquad 线性可分的支持向量机是一种二分类模型,支持向量机通过核技巧可以成为非线性分类器。本文主要分析了线性可分的支持向量机模型,主要取自…

Lesson 08 string类 (上)

C:渴望力量吗,少年? 文章目录 一、STL1. 概念2. STL的六大组件3. STL的重要性 二、string类的介绍与使用1. 介绍2. 使用(1)string类对象的常见构造(2)string类对象的容量操作(3&…

jetson nano 串口通信

目录 1.UART通信介绍 2.电脑端准备工作 2.1 安装串口调试助手 2.2 硬件接线 3.Jetson Nano端准备工作 3.1安装库文件 3.2修改主板上电启动串口权限 4.示例程序-发送及接收 4.1 开启串口调试助手 4.2 导入示例程序 4.3 执行程序 4.4 查看效果 4.4.1 串口调试端 4.4…

交流负载的原理与应用

交流负载是指能够消耗交流电能的设备或系统,在电力系统中,交流负载是不可或缺的一部分,它们将电能转化为其他形式的能量,以满足人们生产和生活的需求。交流负载的原理与应用涉及到许多方面,包括电气工程、电子技术、自…

RT_Thread_内核包版本与芯片包版本不一致的编译报错排查

按时间线写的,建议看完,因为中间有的步骤不必重蹈覆辙。 1、安装RT_Thread Studio、STM32F4的SDK,新建工程编译报错error: struct serial_configure has no member named flowcontrol 1.1、报错含义 结构体struct serial_configure没有flow…

C语言——I /深入理解指针(三)

一、字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* ; ⼀般使⽤: int main() { char ch w; char *pc &ch; *pc w; return 0; } 还有⼀种使⽤⽅式如下: int main() { const char* pstr "hello bit.";//这⾥是把⼀个字…

牛客算法题 HJ100 等差数列 golang语言实现

算法题目 HJ100 等差数列 描述 等差数列 2,5,8,11,14。。。。 (从 2 开始的 3 为公差的等差数列) 输出求等差数列前n项和数据范围: 1 ≤ � ≤ 10001≤n≤1000 输入描述&#xff…

docker-compose Install OrangeHRM

OrangeHRM 前言 OrangeHRM 是一个全面的人力资源管理(HRM) 系统,它包含任何企业所需的所有基本功能。OrangeHRM旨在支持任何规模的团队,包括初创企业、中小企业以及大型跨国组织。 OrangeHRM 提前条件 OrangeHRMdocker & docker-composer 安装or

MYSQL存储

注意: 1.如果没有指定的SESSION/GLOBAL,默认是SESSION,会话变量。 2.mysql服务重新启动之后,所设置的全局参数会失效,要想不失效,可以在/etc/my.cnf中配置。 变量 用户定义变量是用户根据需要自己定义变量…

STM32F407-14.3.5-01捕获_比较通道

捕获/比较通道 每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器) 包括: 捕获的输入部分(数字滤波、多路复用和预分频器), 输出部分(比较器和输出控制)。 中文参考手册中框图分成了三大模块, 把框图合并成了一个整体,以便更好的理解捕获输…

2022年03月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共10题,每题2分,共30分) 第1题 由1,2,3,4,5,0这六个数字经过排列组合能够组成多少个六位数偶数?注意:每一位都不相同,最高位不能为0。 A:720 B:360 C:312 D:88 答案:C 逻辑知识单选题 第2题 运行以下程…

贪心算法策略实现

贪心算法 贪心算法:基于某种情况进行一个排序。 贪心算法得到的是优良解,而非全局最优解。需要证明局部最优解 全局最优解 经典贪心算法 —— 会议问题 对于这个问题 ,我们提出贪心策略: 策略1:按照会议的持续时间长…