当前位置: 首页 > news >正文

继承的笔记

继承

对象代表什么, 就得封装对应的数据, 并提供数据对应的行为

对于两种不同的类, 但是具有很多共同的属性的时候我们就想着用继承, 我们可以将共同的属性放置在一个类中, 然后, 只需要新建两个类, 继承共有的类, 然后单独写自己的属性特点

image.png

image.png

继承类

Java 中提供了一个关键字 extends, 用这个关键字, 我们可以让一个类和另一个类建立联系

public class Student extends Person{}

其中 Student 称为子类 (派生类), Person 称为父类 (基类或超类)
使用继承的好处
可以把多个子类中重复的代码抽取到父类中了, 提高了代码的复用性
子类可以在父类的基础上, 增加其他的功能, 使得子类的功能更加完善
当类与类之间, 存在相同的内容, 并满足子类是父类的一种, 就可以考虑使用继承, 来优化代码

继承的特点

Java 只支持单继承, 不支持多继承,就和人一样,一个人只能由一个爸爸,但是爸爸还可以有爸爸,爷爷也可以由爸爸,这就是多层继承
一个子类只能继承一个父类, 但支持多层继承
多层继承, 子类 A 继承父类 B, 父类 B 可以继承父类 C

虚拟机会自动为类添加继承对象 Object
Java 中所有类都继承自 Object 类。Object 类是 Java 语言中所有类的根类,它定义了一些共同的方法,例如 equals ()、hashCode ()和 toString ()等。如果一个类没有显式地继承任何类,那么它默认会继承 Object 类
image.png

Object 自带的有方法

image.png

子类到底能继承父类的哪些内容

image.png

假设我们的构造方法能够继承的话,那么我们子类继承下来的构造方法就有可能和子类的类名不一致,因为这个传递下来的构造方法的名字是父类的名字

继承成员变量

非私有的变量能够直接继承,并且直接使用
私有的变量能够继承,但是不能直接使用,我们可以利用接口进行使用
非私有变量
image.png

私有变量
image.png

继承成员方法

image.png

在 Java 中,私有方法是不能被继承的主要原因是封装性和安全性。
首先,私有方法是被设计为只能在类内部使用的方法。它们通常用于辅助其他公共方法或内部实现细节,并且不希望被外部类或子类直接调用。将私有方法继承给子类可能会破坏对这些方法的封装性,使得子类可以直接访问并调用这些方法,进而破坏类的设计意图和安全性。
其次,私有方法对于子类来说是不可见的。继承是一种从父类派生出子类的关系,在子类中可以访问和重写父类的方法。然而,私有方法对于子类来说是不可见的,因为它们只能在定义它们的类内部被访问。所以子类无法继承、访问或重写父类的私有方法。
总结起来,私有方法是为了实现封装和保护类的内部实现细节而设计的,不被子类继承是为了确保类的安全性和封装性。如果需要在子类中重用某个方法,可以将该方法定义为受保护的或公共的,以便子类可以继承和使用。

方法并不是一个一个继承的,而是我们在最高一级的类里面定义一个虚方法表,包括:
非 private
非 static
非 final
只有父类的这三种对象才会继承
image.png

image.png

继承中需要学的点

继承中成员变量的访问特点

就近原则,谁离我近,我就用谁

image.png

Super 只能调用一个 super,这个 super 就是类的父类
使用变量的时候,先到本类的成员变量找,然后在到父类的成员变量去找。

image.png

成员方法的访问特点

直接调用的话就满足就近原则,谁距离我近,我就用谁

方法的重写

当父类的方法不能满足子类现在的需求了,我们就需要进行子类的重写

书写格式:
在继承体系中,子类中出现了和父类中一模一样的方法声明,我们就称子类的这个方法是重写的方法

@Override 重写注释

  1. @Override 是放在重写后的方法上,校验子类重写时语法是否正确
  2. 加入注解后如果有红色波浪线,表示语法错误
  3. 建议重写方法都加@Override 注解,代码安全,优雅
    image.png

方法的重写就是覆盖父类传下来的虚方法表

  1. 重写方法的名称、形参列表必须与父类中的一致。
  2. 子类重写父类方法时,访问权限子类必须大于等于父类(暂时了解︰空着不写<protected <public),父类时 public ,子类就不能时 protect,private,但是子类的访问权限可以更高一点
  3. 子类重写父类方法时,返回值类型子类必须小于等于父类,这个一般是在说当父类返回类型是比较大的对象是比如 Animal,那么子类可以是 cat,dog,但是当父类是 dog,cat 类的时候子类不能是 animal 类
  4. 建议: 重写的方法尽量和父类保持一致。
  5. 只有被添加到虚方法表中的方法才能被重写

继承中的构造方法

子类的构造函数写的时候是利用这个 super 进行构造的,我们要注意,这个构造也可以用 alt insert 来进行快捷插入

父类的构造方法不会被子类继承
子类中所有的构造方法默认先访问父类中的无参构造,再执行自己。
为什么

  1. 子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。
  2. 子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化。
    怎么调用父类构造方法的
  3. 子类构造方法的第一行语句默认都是: super (),不写也存在,且必须在第一行
  4. 如果想调用父类有参构造,必须手动写 super 进行调用。

继承中构造方法的访问特点是什么?

  1. 子类不能继承父类的构造方法,但是可以通过 super 调用
  2. 子类构造方法的第一行,有一个默认的 super ();
  3. 默认先访问父类中无参的构造方法,再执行自己。
  4. 如果想要方法文父类有参构造,必须手动书写。

This、super 使用总结

This:理解为一个变量,表示当前方法调用者的地址值:
他是一个局部变量,然后再方法调用的时候会产生值
类似 super()
image.png

相关文章:

继承的笔记

继承 对象代表什么, 就得封装对应的数据, 并提供数据对应的行为 对于两种不同的类, 但是具有很多共同的属性的时候我们就想着用继承, 我们可以将共同的属性放置在一个类中, 然后, 只需要新建两个类, 继承共有的类, 然后单独写自己的属性特点 继承类 Java 中提供了一个关键字…...

Android7.1 ROOT权限的获取

修改文件&#xff1a; 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等训练自己的权重时&#xff0c;需要有大量标注好的数据集&#xff0c;这里有几个好用的数据标注软件labelme、CVAT及LabelImage 一、labelme labelme&#xff1a;https://github.com/wkentaro/labelme 这个软件用的比较多&#xff0c…...

VSCode学习笔记一:添加代码模板

一目了然 1 简述2 设置模板3 Global Snippets file示例 1 简述 问&#xff1a;为什么要设置代码模板&#xff1f; 答&#xff1a;编程语言是有个性的&#xff0c;不同语言的演讲风格是不一样的。 旁白&#xff1a;我不懂&#xff1f;&#xff01; 问&#xff1a;为什么要设置…...

Linux下修改jar包中的配置文件application.conf

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

【python绘图—colorbar操作学习】

文章目录 Colorbar的作用Colorbar的操作截取cmap拼接cmap双刻度列colorbar 引用 Colorbar的作用 Colorbar&#xff08;颜色条&#xff09;在绘图中的作用非常重要&#xff0c;它主要用于以下几个方面&#xff1a; 表示数据范围&#xff1a; Colorbar可以显示图中的颜色映射范围…...

Python+Appium自动化测试-编写自动化脚本

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

AMEYA360|ROHM罗姆首次推出硅电容器BTD1RVFL系列

全球知名半导体制造商ROHM(总部位于日本京都市)新开发出在智能手机和可穿戴设备等领域应用日益广泛的硅电容器。利用ROHM多年来积累的硅半导体加工技术&#xff0c;新产品同时实现了更小的尺寸和更高的性能。 随着智能手机等应用的功能增加和性能提升&#xff0c;业界对于支持更…...

Linux发散小知识

linux/unix哲学&#xff1a;KISS Keep It Simple and Stuid。 "提供一套机制&#xff0c;而不是策略"&#xff0c;“万般皆文本&#xff0c;四处用脚本” unix的数据流追求简单化、通用性、可视性、设备无关&#xff0c;二进制肯定无法做到这些&#xff0c;因此文本…...

GTS 中testPeakPssOfAllApps fail 详解

0. 前言 GTS 在测试 case armeabi-v7a GtsMemoryHostTestCases 的时候出现下面异常&#xff0c;本文总结一下。 com.google.android.memory.gts.AllAppsMemoryHostTest#testPeakPssOfAllApps 1. error log 09-14 10:16:34 I/TestFailureListener: FailureListener.testFaile…...

linux查看远程仓库的分支

在 Linux 终端中&#xff0c;您可以使用 git 命令来查看远程仓库的分支。git 是版本控制系统&#xff0c;用于管理代码的版本和协作开发。以下是查看远程仓库分支的方法&#xff1a; 查看所有远程分支&#xff1a; git ls-remote <remote_repository_url> 这个命令会显示…...

【Linux常用命令】

编程不良人 Linux 笔记 一、防火墙相关 1、查看防火墙状态 systemctl status flrewalld2、如果防火墙是开启状态的&#xff0c;需要关闭 systemctl stop firewalld3、永久行关闭操作&#xff08;禁止开机自启动&#xff09; 因为防火默认是开启状态的&#xff0c;如果只是手…...

QString类与整型,浮点数互转

本文介绍QString类与整型&#xff0c;浮点数之间的相互转换。 1.QString类转整型 QString类转整型&#xff08;包含2进制&#xff0c;8进制&#xff0c;16进制&#xff09;&#xff0c;可以使用QString的toInt()函数。 QString str("1234"); bool bOK false; int…...

基于STM32F407ZET6的环境温湿度监控系统(粤嵌GEC-M4)

注意使用事项&#xff1a; 开发板如下 由于外部晶振是8M&#xff0c;需要修改setup和stm32f4头文件的晶振值。 操作如下&#xff1a; system_stm32f4xx.c的254行 #define PLL_M 8stm32f4xx.h的127行 #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the Ex…...

2023年五一杯数学建模A题无人机定点投放问题求解全过程论文及程序

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

Redis 7 第九讲 微服务集成Redis 应用篇

Jedis 理论 Jedis是redis的java版本的客户端实现&#xff0c;使用Jedis提供的Java API对Redis进行操作&#xff0c;是Redis官方推崇的方式&#xff1b;并且&#xff0c;使用Jedis提供的对Redis的支持也最为灵活、全面&#xff1b;不足之处&#xff0c;就是编码复杂度较高。 …...

c++day7

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 #include <iostream>using namespace std; template <typename T> class Myvector { private:T *start;//起始指针T *end;//数组末尾指针T *last;//数组有效长度的尾指针 public://定义无参构…...

C++学习概述

1.c 为啥需要头文件 如果您刚开始使用 C&#xff0c;您可能想知道为什么C需要 #include 头文件&#xff0c;以及为什么一个程序要拥有多个 .cpp 文件。 原因很简单&#xff1a; a) 减少编译时间 随着程序的增长&#xff0c;您的代码也会增长&#xff0c;如果所有内容都在一个…...

关系型数据库和非关系型数据库

关系型数据库和非关系型数据库 关系型数据库非关系型数据库 非关系型数据库和关系型数据库是两种不同类型的数据库管理系统&#xff0c;它们用于存储和管理数据&#xff0c;但在数据组织和处理方式上有一些重要的区别。 关系型数据库 1.结构化数据存储&#xff1a;关系型数据库…...

基于SSM的快餐店点餐服务系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

使用vcpkg配置CGAL+visual studio 2022

先安装vcpkg C:\dev> git clone https://github.com/microsoft/vcpkg C:\dev> cd vcpkg C:\dev\vcpkg> .\bootstrap-vcpkg.bat 运行后&#xff0c;先执行 C:\dev\vcpkg> .\vcpkg.exe install yasm-tool:x86-windows 这是因为gmp库中有个bug&#xff0c;只能这样…...

【Spring面试】三、Bean的配置、线程安全、自动装配

文章目录 Q1、什么是Spring Bean&#xff1f;和对象有什么区别Q2、配置Bean有哪几种方式&#xff1f;Q3、Spring支持的Bean有哪几种作用域&#xff1f;Q4、单例Bean的优势是什么&#xff1f;Q5、Spring的Bean是线程安全的吗&#xff1f;Q6、Spring如何处理线程并发问题&#xf…...

flink连接kafka报:org.apache.kafka.common.errors.TimeoutException

测试flink1.12.7 连接kafka&#xff1a; package org.test.flink;import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutio…...

sql order by 排序 null值放最后,怎么写

在 SQL 中&#xff0c;可以使用 ORDER BY 子句对结果进行排序。如果要将 NULL 值放在最后&#xff0c;可以在排序列中使用 CASE 表达式来处理。 下面是一个示例查询&#xff0c;将 NULL 值放在最后进行排序&#xff1a; SELECT column1, column2 FROM your_table ORDER BY CAS…...

HDMI字符显示实验

FPGA教程学习 第十五章 HDMI字符显示实验 文章目录 FPGA教程学习前言实验原理程序设计像素点坐标模块字符叠加模块 实验结果知识点总结 前言 在HDMI输出彩条的基础上输出osd叠加信息。 实验原理 实验通过字符转换工具将字符转换为 16 进制 coe 文件存放到单端口的 ROM IP 核…...

Spring Cloud 框架搭建

Spring Cloud 框架搭建之一基础框架 创建父项目创建子项目 创建父项目 第一步&#xff1a;新建项目&#xff0c;填写基础信息 第二步&#xff1a;这里不需要其他组件直接点next即可。 第三步&#xff1a;pom文件添加下述代码&#xff0c;将父项目设置为pom文件形式打包&#…...

20个非常有用的单行Python代码片段

1. 写在前面 继上篇&#xff0c;继续在本文分享 20 个 Python 单行代码&#xff0c;可以在 30 秒或更短时间内轻松学会。这些单行代码不仅可以提高效率&#xff0c;同时使代码看起来更整洁、更易读。&#xff1a;&#xff09; 个人博客&#xff1a; https://jianpengzhang.git…...

【LangChain系列 9】Prompt模版——MessagePromptTemplate

原文地址&#xff1a;【LangChain系列 9】Prompt模版——MessagePromptTemplate 本文速读&#xff1a; MessagePromptTemplate MessagesPlaceholder 在对话模型(chat model) 中&#xff0c; prompt主要是封装在Message中&#xff0c;LangChain提供了一些MessagePromptTemplat…...

ROS2的学习路径

学习ROS2的建议学习路径&#xff1a; 理解基础知识&#xff1a; 熟悉机器人操作系统&#xff08;ROS&#xff09;的概念及其架构。了解ROS2相对于ROS1的优势以及其提供的关键功能。 安装和配置&#xff1a; 在你选择的操作系统上安装ROS2&#xff08;如Ubuntu、Windows、macOS…...

Maintaining leader role through timed lease mechanism

Continuous understanding of distributed systems design On the one hand 基于定时的租约机制来保持leader角色 基于定时的租约机制来保持leader角色的设计思想是一种在分布式系统中确保高可用性和系统一致性的解决方法。 在分布式系统中&#xff0c;通常会有一个角色被选举…...

自己做网站难吗/百度快照怎么使用

其实一开始&#xff0c;在简书上写东西我是拒绝的&#xff01;怕被拍砖&#xff0c;后来发现邻桌的郭老师时不时写写简书&#xff0c;我才意识到&#xff0c;原来什么样的人都可以写简书&#xff0c;充分说明简书的读者还是很包容的。胆战心惊&#xff0c;写下第一篇简书&#…...

python做软件的网站/流量点击推广平台

车架号车型发动机和变速箱型号行驶里程4JGDF7DE7DA120825GL550276928和72290967345故障现象(陈述)&#xff1a;此车在车库放了3个月&#xff0c;去启动无反应&#xff0c;接到客户救援电话最后直接拿上一个原厂电瓶给客户换上&#xff0c;换上之后车能正常启动&#xff0c;但是…...

手机网站宽度自适应/营销推广费用方案

如何识别架构设计复杂度 架构设计&#xff1a;识别复杂度 我在前面讲过&#xff0c;架构设计的本质目的是为了解决软件系统的复杂性&#xff0c;所以在我们设计架构时&#xff0c;首先就要分析系统的复杂性。只有正确分析出了系统的复杂性&#xff0c;后续的架构设计方案才不会…...

惠州做棋牌网站建设多少钱/企业seo网站推广

POST请求设置Content-Type 由于后端采用的是form表单形式上送参数&#xff0c;需要设置Content-Type axios设置如下const _axios axios.create(config); _axios.defaults.headers.post[Content-Type] application/x-www-form-urlencoded;; api调用import { request } from pl…...

wordpress 使用smtp/seo网站优化流程

adt, andriod-ndk-r8e, andriod-sdk-2.2, andriod-sdk-2.3, andriod-sdk-latest 编译环境从网上找&#xff0c;ndk推荐使用 ndk-r8e, r9d相当2dx-2.1.4不好用&#xff0c;有各种问题 然后需要在mac的根目录下添加配置 .bash_profile 输入export COCOS2DX_ROOT/opt/cocos2d-2.…...

俄罗斯做牙网站/网站广告调词平台

ArrayList1. 可变数组实现&#xff0c;1.5倍扩容2. 非线程安全3. 采用了Fail-Fast机制&#xff0c;面对并发的修改时&#xff0c;迭代器很快就会完全失败&#xff0c;而不是冒着在将来某个不确定时间发生任意不确定行为的风险LinkedList1. 双向循环链表实现2. 非线程安全3. 元素…...