JavaSE——面向对象6.1:继承知识点补充(虚方法表等)

news2024/12/24 9:39:26

目录

一、子类到底能继承父类中的哪些内容?

二、继承内存图

三、继承中:成员变量和成员方法的访问特点

(一)成员变量的访问特点

(二)成员方法的访问特点

1.this与super访问成员方法的特点

2.方法重写

2.1方法重写的本质:子类覆盖了从父类继承的虚方法表里的方法。

2.2方法重写注意事项和要求

四、继承中:构造方法的访问特点

五、super与this关键字


一、子类到底能继承父类中的哪些内容?

父类中的构造方法:无论是不是私有的,子类都无法继承,因为违背了构造方法必须与类名一致的原则。

父类中的成员变量:无论父类的成员变量是不是私有的,子类都能继承,但是父类私有的成员变量,子类无法直接使用,如果必须要使用,父类就必须要提供setXxx和getXxx方法。

父类中的成员方法:子类可以继承父类的虚方法表中的成员方法,子类无法继承父类中不在虚方法表中的成员方法。

虚方法表:将类中可能经常被使用的方法抽取到虚方法表中,抽取到虚方法表中的方法要满足以下条件:非private、static和final修饰

如下图所示:C类将自己的虚方法表交给子类B,子类B会根据虚方法表中的内容,在C的基础上再添加自己类中的虚方法;A类同上。

子类在调用方法时,会查看方法区中,该方法是不是虚方法。并且是先在子类的虚方法表中查找,子类中没有找到,再去父类的虚方法表中查找,以此类推。

二、继承内存图

        Fu类和Zi类因为是继承的关系,在方法区中加载的时候,Fu类和Zi类都会被加载。并且会在堆中开辟一块空间,这块空间分成两份,一份存放父类的属性,另一份存放子类的属性。在对属性进行赋值时,先去子类中寻找是否有该属性,子类中没有找到,再去父类中寻找,找到为止。

三、继承中:成员变量和成员方法的访问特点

(一)成员变量的访问特点

就近原则:谁离得近就用谁

(二)成员方法的访问特点

1.this与super访问成员方法的特点

this是先在本类中找,本类没有再去父类中找;

super是先在父类中找,父类中没有再去更高一层的父类中找。

2.方法重写

2.1方法重写的本质:子类覆盖了从父类继承的虚方法表里的方法。

调用时是在虚方法表中查找。

2.2方法重写注意事项和要求

        当父类中的方法不能满足需求,就需要进行重写。重写有的时候仍然会用到父类,使用super.方法体+子类新增的代码即可;当不需要父类的内容时,直接写子类新增的代码即可。

  1. 重写方法的名称、形参列表必须与父类中的一致。
  2. 子类重写父类方法时,访问权限子类必须大于等于父类
  3. 子类重写父类方法时,返回值类型子类必须小于等于父类
  4. 建议:重写的方法尽量和父类保持一致
  5. 只有被添加到虚方法表中的方法才能被重写 

四、继承中:构造方法的访问特点

  • 特点1:父类中的构造方法不会被子类继承。
  • 特点2:子类中所有的构造方法默认先访问父类中的无参构造,再执行自己。

原因:

  • 子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据
  • 子类初始化之前,一定要调用父类构造方法,先完成父类数据空间的初始化。

子类调用父类构造方法的方式:

  • 子类构造方法的第一行语句默认都是:super(),不写也存在,且必须在有效代码的第一行
  • 如果想调用父类有参构造,必须手动写super进行调用

五、super与this关键字

我们知道,在构造方法中,会默认有一个super(),调用父类的无参构造。现在有一个需求:在创建对象的时候,调用无参构造时,直接给某个属性赋值。

代码如下:

public class TestDemo {
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.school); // 北京大学
    }
}

class Student {
    String name;
    int age;
    String school;

    public Student() {
        // 调用无参构造时,给属性默认值
        this(null, 0, "北京大学");
    }

    public Student(String name, int age, String school) {
        this.name = name;
        this.age = age;
        this.school = school;
    }
}

小细节:

        上述代码中,在无参构造中可以用this(),调用本类的有参构造,并给出默认值;

且因为super和this不能在一个构造方法中同时使用,这里写了this,super就不会被虚拟机添加了。

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

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

相关文章

社区交流礼仪 | 提问的艺术

唠唠闲话 2021 年通过 Julia 社区了解到开源,自此开始融入开源社区,学习和体验这种独特的协作模式与交流文化,受益良多。本篇文章为开源新手必读,文章中探讨的交流模式,不仅对参与开源项目的协作有所帮助,…

计组体系软考题2-计算机组成原理与计算机体系结构概论

一、CPU组成(运算器控制器) 1.运算器 题1-存放操作数/运算结果的ACC累加寄存器 1. 2. 题2-加法器(算术逻辑单元的部件) 题3-判断对错 程序计数器PC(运算器),只存放地址题4- 2. 控制器 题1-…

10.8每日作业

当用户点击取消按钮,弹出问题对话框,询问是否要确定退出登录,并提供两个按钮,yes|No,如果用户点击的Yes,则关闭对话框,如果用户点击的No,则继续登录 当用户点击的登录按钮&#xff…

热网无线监测系统 GetMenuItem 接口存在SQL注入漏洞

漏洞描述 热网无线监测系统 /DataSrvs/UCCGSrv.asmx/GetMenuItem 接口处存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至…

Hydra 新手友好使用教程

1. Hydra 简介 Hydra是一款强大的网络登录暴力破解工具,支持多种协议。本教程将帮助新手快速上手,掌握常用指令和操作。 2. 基本语法 hydra [参数] 目标 3. 核心参数详解 3.1 用户名和密码设置 单个用户名: -l LOGIN 例:-l admin 用户名…

【LeetCode】动态规划—115. 不同的子序列(附完整Python/C++代码)

动态规划—115. 不同的子序列 前言题目描述基本思路1. 问题定义2. 理解问题和递推关系3. 解决方法3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化5. 小总结 代码实现PythonPython3代码实现Python 代码解释 CC代码实现C 代码解释1. 变量定义:2. 初始化:3. 动态规划状态转…

高级算法设计与分析 学习笔记11 动态规划

要讲动态规划,当然少不了斐波拉及数列: 可以看到,动态规划效率高的秘诀就在于有记忆,不用做重复的事。 矩阵列乘法: 可以看到,只要找到了一个恰到好处的计算顺序(注意矩阵乘法只有结合律没有交换…

HT8513 内置自适应同步升压和防破音功能的6.5W D类及AB类音频功率放大器

1、特征 防削顶失真功能(防破音,Anti-Clipping Function, ACF) 免滤波器数字调制&#xff0c;直接驱动扬声器 输出功率 3W (VBAT3.3V, RL-4Ω, THDN<1%, 20-20kHz full band) 2.0W (VBAT3.3V, RL8Ω,THDN<1%, 20-20kHz full band) 6.5W (VBAT4.2V, RL2Ω, THDN10%,f1kHz…

SQL第14课挑战题

1. 将两个select语句结合起来&#xff0c;以便从OrderItems表中检索产品ID(prod_id)和quantity。其中&#xff0c;一个select语句过滤数量为100的行&#xff0c;另一个select语句过滤ID以BNBG开头的产品。按产品ID对结果进行排序。 2. 重新第一题&#xff0c;仅使用单个select语…

2021浙江省赛 F I

F - Fair Distribution 题意 给定两个a,b,每次操作可以使b或者a--,为使得b是a的倍数,最小操作次数是多少 思路 朴素版本:枚举a一直到1为止,每一次找到离b最近的a的倍数(>b),然后每次更新一下最小操作次数是多少,时间复杂度O(n*T) 优化版本:每一个a在找到:找到离b最近的…

图像增强论文精读笔记-Low-Light Image Enhancement via a Deep Hybrid Network

1. 论文基本信息 论文标题&#xff1a;Low-Light Image Enhancement via a Deep Hybrid Network 作者&#xff1a;Wenqi Ren等 发表时间和期刊&#xff1a;2019&#xff1b;IEEE TIP 论文链接&#xff1a;https://ieeexplore.ieee.org/document/8692732 2. 研究背景和动机 …

Linux防火墙-案例(二)snatdnat

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令&#xff0c;我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…

YOLOv11改进 ,YOLOv11改进主干网络为MobileNetV3,助力涨点

YOLOv11改进介绍 YOLOv11 跟 YOLOv8 结构差不多相似,只是作者在 YOLOv8 基础上进行了改进,我感觉 YOLOv11 训练速度更快,map和精度应该比 YOLOv8 高一些,所以我会把 YOLOv11 改进也写在本专栏里面。YOLOv11 改进,可以看往期 YOLOv8 改进主干网络教程,原理都是一样的,这…

Qt(10.8)

作业&#xff1a;完善登录界面 源文件 #include "widget.h" #include "ui_widget.h" #include<QDebug> #include<QLabel> #include<QMessageBox> Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setu…

MySQL连接查询:自连接

先看我的表结构 emp表 自连接也就是把一个表看作是两个作用的表就好&#xff0c;也就是说我把emp看作员工表&#xff0c;也看做领导表 自连接 基本语法 select 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件;例子1&#xff1a;查询员工 及其 所属领导的名字 select a.n…

【stm32】寄存器(stm32技术手册下载链接)

1、资料下载 RM0008_STM32F101xx,STM32F102xx,STM32F103xx,STM32F105xx和STM32F107xx单片机参考手册 | STMCU中文官网 2、代码 设置PB7 //设置PB7 #define SDA_IN() {GPIOB->CRL&0X0FFFFFFF;GPIOB->CRL|(u32)8<<28;} #define SDA_OUT() {GPIOB->…

wsl中配置cuda,pytorch,cudnn,vscode

参考链接 查看python版本 从 NVIDIA 的官网上下载 CUDA 的 pin 文件。这个文件确保 CUDA 仓库的优先级更高&#xff0c;防止与其他仓库发生冲突。 wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin将下载的 cuda-wsl-u…

Python 卸载所有的包

Python 卸载所有的包 引言正文 引言 可能很少有小伙伴会遇到这个问题&#xff0c;当我们错误安装了一些包后&#xff0c;由于包之间有相互关联&#xff0c;导致一些已经安装的包无法使用&#xff0c;而由于我们已经安装了很多包&#xff0c;它们的名字我们并不完全知道&#x…

点餐小程序实战教程17角色管理

目录 1 创建API2 创建全局变量3 加载角色4 引导用户注册总结 小程序中如果有多重角色人员使用的&#xff0c;通常需要根据用户的角色来进行页面跳转。我们点餐小程序也是区分不同的用户&#xff0c;有顾客和员工的区分&#xff0c;本篇我们讲解一下如何利用API来加载用户的角色…

移除元素(算法题分享)

移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k&#xff0c;要通过此题&#xff0c;您需要执行以下操作&#xf…