继承的笔记
继承
对象代表什么, 就得封装对应的数据, 并提供数据对应的行为
对于两种不同的类, 但是具有很多共同的属性的时候我们就想着用继承, 我们可以将共同的属性放置在一个类中, 然后, 只需要新建两个类, 继承共有的类, 然后单独写自己的属性特点
继承类
Java 中提供了一个关键字 extends, 用这个关键字, 我们可以让一个类和另一个类建立联系
public class Student extends Person{}
其中 Student 称为子类 (派生类), Person 称为父类 (基类或超类)
使用继承的好处
可以把多个子类中重复的代码抽取到父类中了, 提高了代码的复用性
子类可以在父类的基础上, 增加其他的功能, 使得子类的功能更加完善
当类与类之间, 存在相同的内容, 并满足子类是父类的一种, 就可以考虑使用继承, 来优化代码
继承的特点
Java 只支持单继承, 不支持多继承,就和人一样,一个人只能由一个爸爸,但是爸爸还可以有爸爸,爷爷也可以由爸爸,这就是多层继承
一个子类只能继承一个父类, 但支持多层继承
多层继承, 子类 A 继承父类 B, 父类 B 可以继承父类 C
虚拟机会自动为类添加继承对象 Object
Java 中所有类都继承自 Object 类。Object 类是 Java 语言中所有类的根类,它定义了一些共同的方法,例如 equals ()、hashCode ()和 toString ()等。如果一个类没有显式地继承任何类,那么它默认会继承 Object 类
Object 自带的有方法
子类到底能继承父类的哪些内容
假设我们的构造方法能够继承的话,那么我们子类继承下来的构造方法就有可能和子类的类名不一致,因为这个传递下来的构造方法的名字是父类的名字
继承成员变量
非私有的变量能够直接继承,并且直接使用
私有的变量能够继承,但是不能直接使用,我们可以利用接口进行使用
非私有变量
私有变量
继承成员方法
在 Java 中,私有方法是不能被继承的主要原因是封装性和安全性。
首先,私有方法是被设计为只能在类内部使用的方法。它们通常用于辅助其他公共方法或内部实现细节,并且不希望被外部类或子类直接调用。将私有方法继承给子类可能会破坏对这些方法的封装性,使得子类可以直接访问并调用这些方法,进而破坏类的设计意图和安全性。
其次,私有方法对于子类来说是不可见的。继承是一种从父类派生出子类的关系,在子类中可以访问和重写父类的方法。然而,私有方法对于子类来说是不可见的,因为它们只能在定义它们的类内部被访问。所以子类无法继承、访问或重写父类的私有方法。
总结起来,私有方法是为了实现封装和保护类的内部实现细节而设计的,不被子类继承是为了确保类的安全性和封装性。如果需要在子类中重用某个方法,可以将该方法定义为受保护的或公共的,以便子类可以继承和使用。
方法并不是一个一个继承的,而是我们在最高一级的类里面定义一个虚方法表,包括:
非 private
非 static
非 final
只有父类的这三种对象才会继承
继承中需要学的点
继承中成员变量的访问特点
就近原则,谁离我近,我就用谁
Super 只能调用一个 super,这个 super 就是类的父类
使用变量的时候,先到本类的成员变量找,然后在到父类的成员变量去找。
成员方法的访问特点
直接调用的话就满足就近原则,谁距离我近,我就用谁
方法的重写
当父类的方法不能满足子类现在的需求了,我们就需要进行子类的重写
书写格式:
在继承体系中,子类中出现了和父类中一模一样的方法声明,我们就称子类的这个方法是重写的方法
@Override 重写注释
- @Override 是放在重写后的方法上,校验子类重写时语法是否正确
- 加入注解后如果有红色波浪线,表示语法错误
- 建议重写方法都加@Override 注解,代码安全,优雅
方法的重写就是覆盖父类传下来的虚方法表
- 重写方法的名称、形参列表必须与父类中的一致。
- 子类重写父类方法时,访问权限子类必须大于等于父类(暂时了解︰空着不写<protected <public),父类时 public ,子类就不能时 protect,private,但是子类的访问权限可以更高一点
- 子类重写父类方法时,返回值类型子类必须小于等于父类,这个一般是在说当父类返回类型是比较大的对象是比如 Animal,那么子类可以是 cat,dog,但是当父类是 dog,cat 类的时候子类不能是 animal 类
- 建议: 重写的方法尽量和父类保持一致。
- 只有被添加到虚方法表中的方法才能被重写
继承中的构造方法
子类的构造函数写的时候是利用这个 super 进行构造的,我们要注意,这个构造也可以用 alt insert 来进行快捷插入
父类的构造方法不会被子类继承
子类中所有的构造方法默认先访问父类中的无参构造,再执行自己。
为什么
- 子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。
- 子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化。
怎么调用父类构造方法的 - 子类构造方法的第一行语句默认都是: super (),不写也存在,且必须在第一行。
- 如果想调用父类有参构造,必须手动写 super 进行调用。
继承中构造方法的访问特点是什么?
- 子类不能继承父类的构造方法,但是可以通过 super 调用
- 子类构造方法的第一行,有一个默认的 super ();
- 默认先访问父类中无参的构造方法,再执行自己。
- 如果想要方法文父类有参构造,必须手动书写。
This、super 使用总结
This:理解为一个变量,表示当前方法调用者的地址值:
他是一个局部变量,然后再方法调用的时候会产生值
类似 super()
相关文章:

继承的笔记
继承 对象代表什么, 就得封装对应的数据, 并提供数据对应的行为 对于两种不同的类, 但是具有很多共同的属性的时候我们就想着用继承, 我们可以将共同的属性放置在一个类中, 然后, 只需要新建两个类, 继承共有的类, 然后单独写自己的属性特点 继承类 Java 中提供了一个关键字…...
Android7.1 ROOT权限的获取
修改文件: system/extras/su/su.c system/core/include/private/android_filesystem_config.h system/core/libcutils/fs_config.c frameworks/base/core/jni/com_android_internal_os_Zygote.cpp frameworks/base/cmds/app_process/app_main.cpp device/qcom…...

几个好用的数据标注软件labelme、CVAT及LabelImage
我们使用yolov3、yolov4、yolov5、yolov8等训练自己的权重时,需要有大量标注好的数据集,这里有几个好用的数据标注软件labelme、CVAT及LabelImage 一、labelme labelme:https://github.com/wkentaro/labelme 这个软件用的比较多,…...

VSCode学习笔记一:添加代码模板
一目了然 1 简述2 设置模板3 Global Snippets file示例 1 简述 问:为什么要设置代码模板? 答:编程语言是有个性的,不同语言的演讲风格是不一样的。 旁白:我不懂?! 问:为什么要设置…...

Linux下修改jar包中的配置文件application.conf
文件位置 jar包文件工程目录 打包后解压jar包目录 提取和上传 jar tf XXX.jar # 获取包内文件 application.conf是jar包的配置文件,如果修改需要 提取文件 jar xf my-app.jar application.conf 修改后上传文件 jar uf my-app.jar application.conf...

【python绘图—colorbar操作学习】
文章目录 Colorbar的作用Colorbar的操作截取cmap拼接cmap双刻度列colorbar 引用 Colorbar的作用 Colorbar(颜色条)在绘图中的作用非常重要,它主要用于以下几个方面: 表示数据范围: Colorbar可以显示图中的颜色映射范围…...

Python+Appium自动化测试-编写自动化脚本
之前已经讲述怎样手动使用appium-desktop启动测试机上的app,但我们实际跑自动化脚本的过程中,是需要用脚本调用appium启动app的,接下来就尝试写Python脚本启动app并登陆app。环境为Windows10 Python3.7 appium1.18.0 Android手机 今日头条…...

AMEYA360|ROHM罗姆首次推出硅电容器BTD1RVFL系列
全球知名半导体制造商ROHM(总部位于日本京都市)新开发出在智能手机和可穿戴设备等领域应用日益广泛的硅电容器。利用ROHM多年来积累的硅半导体加工技术,新产品同时实现了更小的尺寸和更高的性能。 随着智能手机等应用的功能增加和性能提升,业界对于支持更…...
Linux发散小知识
linux/unix哲学:KISS Keep It Simple and Stuid。 "提供一套机制,而不是策略",“万般皆文本,四处用脚本” unix的数据流追求简单化、通用性、可视性、设备无关,二进制肯定无法做到这些,因此文本…...

GTS 中testPeakPssOfAllApps fail 详解
0. 前言 GTS 在测试 case armeabi-v7a GtsMemoryHostTestCases 的时候出现下面异常,本文总结一下。 com.google.android.memory.gts.AllAppsMemoryHostTest#testPeakPssOfAllApps 1. error log 09-14 10:16:34 I/TestFailureListener: FailureListener.testFaile…...
linux查看远程仓库的分支
在 Linux 终端中,您可以使用 git 命令来查看远程仓库的分支。git 是版本控制系统,用于管理代码的版本和协作开发。以下是查看远程仓库分支的方法: 查看所有远程分支: git ls-remote <remote_repository_url> 这个命令会显示…...

【Linux常用命令】
编程不良人 Linux 笔记 一、防火墙相关 1、查看防火墙状态 systemctl status flrewalld2、如果防火墙是开启状态的,需要关闭 systemctl stop firewalld3、永久行关闭操作(禁止开机自启动) 因为防火默认是开启状态的,如果只是手…...
QString类与整型,浮点数互转
本文介绍QString类与整型,浮点数之间的相互转换。 1.QString类转整型 QString类转整型(包含2进制,8进制,16进制),可以使用QString的toInt()函数。 QString str("1234"); bool bOK false; int…...

基于STM32F407ZET6的环境温湿度监控系统(粤嵌GEC-M4)
注意使用事项: 开发板如下 由于外部晶振是8M,需要修改setup和stm32f4头文件的晶振值。 操作如下: system_stm32f4xx.c的254行 #define PLL_M 8stm32f4xx.h的127行 #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the Ex…...

2023年五一杯数学建模A题无人机定点投放问题求解全过程论文及程序
2023年五一杯数学建模 A题 无人机定点投放问题 原题再现: 随着科学技术的不断发展,无人机在许多领域都有着广泛的应用。对于空中执行定点投放任务的无人机,其投放精度不仅依赖于无人机的操作技术,而且还与无人机执行任务时所处状…...

Redis 7 第九讲 微服务集成Redis 应用篇
Jedis 理论 Jedis是redis的java版本的客户端实现,使用Jedis提供的Java API对Redis进行操作,是Redis官方推崇的方式;并且,使用Jedis提供的对Redis的支持也最为灵活、全面;不足之处,就是编码复杂度较高。 …...

c++day7
仿照vector手动实现自己的myVector,最主要实现二倍扩容功能 #include <iostream>using namespace std; template <typename T> class Myvector { private:T *start;//起始指针T *end;//数组末尾指针T *last;//数组有效长度的尾指针 public://定义无参构…...
C++学习概述
1.c 为啥需要头文件 如果您刚开始使用 C,您可能想知道为什么C需要 #include 头文件,以及为什么一个程序要拥有多个 .cpp 文件。 原因很简单: a) 减少编译时间 随着程序的增长,您的代码也会增长,如果所有内容都在一个…...
关系型数据库和非关系型数据库
关系型数据库和非关系型数据库 关系型数据库非关系型数据库 非关系型数据库和关系型数据库是两种不同类型的数据库管理系统,它们用于存储和管理数据,但在数据组织和处理方式上有一些重要的区别。 关系型数据库 1.结构化数据存储:关系型数据库…...

基于SSM的快餐店点餐服务系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...