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

目录

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

二、继承内存图

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

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

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

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.mzph.cn/diannao/55666.shtml

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

相关文章

shell脚本写代码

用简单的test语句来判断是否闰年 #! /bin/bash read -p "sd " yearif [ $((year%4)) -eq 0 -a $((year%100)) -ne 0 -o $((year%400)) -eq 0 ]thenecho "是润年"elseecho "不是闰年" fi判断一个数是否为偶数 #! /bin/bash read -p "…

vue源码解析(源码解析学习大纲)

文章目录 Vue源码解析入手方向大纲1.核心概念1-1.响应式系统1-2. 组件1-3. 虚拟DOM1-4. 指令1-5. 生命周期钩子 2.虚拟DOM2-1. 概念2-2. 工作流程2-3. 示例2-4.总结 3.组件系统3-1. 组件的定义3-2. 组件的创建3-3. 组件的模板3-4. 生命周期3-5. 事件处理3-6. 插槽(S…

服务器虚拟化的详细学习顺序

服务器虚拟化的详细学习顺序可以遵循以下步骤,这些步骤旨在帮助学习者系统地掌握虚拟化技术: 1. 理解基本概念与原理 定义与原理:首先,需要明确服务器虚拟化的定义和基本原理,即如何将物理服务器资源转化为虚拟服务器…

【C语言】猜数字小游戏

😂个人主页: 起名字真南 🤣个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 随机数的生成1.1 rand1.2 srand1.3 time1.4 设置随机数范围 2 猜数字游戏实现 前言:我们学习完前面的循环以后可以写一个猜数字小游戏 1 随机数的生成 想要完成…

Java 中的 LinkedHashMap

让我们从一个简单的 Java 代码片段开始,演示如何在 Java 中创建和使用 LinkedHashMap。 import java.util.LinkedHashMap; public class LinkedHashMapCreation { public static void main(String[] args) { // Create a LinkedHashMap of S…

django的路由分发

前言: 在前面我们已经学习了基础的Django了,今天我们将继续学习,我们今天学习的是路由分发: 路由分发是Web框架中的一个核心概念,它指的是将不同的URL请求映射到对应的处理函数(视图)的过程。…

Ambari搭建Hadoop集群 — — 问题总结

Ambari搭建Hadoop集群 — — 问题总结 一、部署教程: 参考链接:基于Ambari搭建大数据分析平台-CSDN博客 二、问题总结: 1. VMwear Workstation 查看网关 2. 资源分配 参考: 硬盘:master(29 GB&#xff…

手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]

有时候,您会被锁定在自己的 Android 设备之外,而且似乎不可能重新进入。 一个例子就是你买了一部二手手机,后来发现无法使用。另一种情况是你忘记了屏幕锁定密码和用于验证密码的 Google 帐户凭据。这种情况很少见,但确实会发生&…

15分钟学 Python 第35天 :Python 爬虫入门(一)

Day 35 : Python 爬虫简介 1.1 什么是爬虫? 网页爬虫(Web Crawler)是自动访问互联网并提取所需信息的程序。爬虫的主要功能是模拟用户通过浏览器访问网页的操作,从而实现对网页内容的批量访问与信息提取。它们广泛应用于数据收集…

RTEMS面试题汇总及参考答案

目录 RTEMS是什么?它在嵌入式系统中扮演什么角色? RTEMS的全称是什么? RTEMS的主要特点有哪些? RTEMS支持哪些处理器架构? RTEMS的可剥夺型内核和不可剥夺型内核有何不同? RTEMS 的微内核设计及其优势 RTEMS 如何实现多任务处理和调度 RTEMS 的任务调度策略有哪…

Unity各个操作功能+基本游戏物体创建与编辑+Unity场景概念及文件导入导出

各个操作功能 部分功能 几种操作游戏物体的方式: Center:有游戏物体父子关系的时候,中心点位置 Global/Local:世界坐标系方向/自身坐标系方向 :调试/暂停/下一帧 快捷键 1.Alt鼠标左键:可以实现巡游角度查看场景 2.鼠标滚轮…

MySQL从0到1基础语法笔记(上)

博客主页:誓则盟约系列专栏:Java Web关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 MySQL笔记: 一、注释: 二、SQL四大类&#xff…

leetcode 刷题day36动态规划Part05 背包问题(完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯 (进阶))

完全背包 完全背包的每件商品都有无限个,和01背包的一不同主要体现在遍历顺序上。为了保证每个物品仅被添加一次,01背包内嵌的循环是从大到小遍历。而完全背包的物品是可以添加多次的,所以要从小到大去遍历。 518. 零钱兑换 II 思路&#…

、并发请求

初始化 const axios require(axios) const apis [url1, url2, url3] // 模拟 http apis并发函数 /*** param {Array<string>} apis* param {number} maxNum 最大并发量* returns {Promise}*//*** param {Array<string>} apis 请求的API集* param {number} maxN…

在线测径仪都有哪些别称?

在线测径仪广泛运用于电线电缆、输送管、金属丝、PVC管、医疗器械、塑料、金属拉丝、橡胶、高线、圆钢、钢筋、螺纹钢、钢管、轧钢等生产行业&#xff0c;主要用于这些行业生产出的产品的直径、椭圆度&#xff08;双轴及以上测头&#xff09;等的检测。 测径仪为在线检测设备&a…

等保测评中的关键技术应用:防火墙与入侵检测系统

在当今数字化时代&#xff0c;网络安全已成为企业运营不可或缺的一部分。等级保护&#xff08;简称“等保”&#xff09;制度作为中国网络安全领域的一项重要法规&#xff0c;旨在通过不同等级的安全保护要求&#xff0c;确保信息系统免受各类威胁和破坏&#xff0c;保障信息的…

【C#生态园】打造现代化跨平台应用:深度解析.NET桌面应用工具

选择最适合你的.NET UI框架&#xff1a;全面解析六种热门选择 前言 在现代软件开发中&#xff0c;选择合适的桌面应用框架和UI库对于开发人员来说至关重要。本文将介绍几种流行的.NET桌面应用框架和UI库&#xff0c;包括Eto.Forms、Avalonia、ReactiveUI、MahApps.Metro、Mat…

智能指针详解

目录 智能指针原理 RAII Unique_ptr Shared_ptr Shared_ptr缺点 定制删除器 在C库里提供的智能指针有跟多&#xff0c;如下图所示&#xff0c;使用时需要包含头文件<memory>。下面将详细介绍这些智能指针的底层原理和缺点&#xff0c;还有每个智能指针的应用场景。…

AI寒冬?不,2025年将是AI代理之年

引言 近年来,人工智能(AI)的发展速度令人瞩目,但一些观察者认为今年的前六个月相对“缓慢和无趣”。然而,这种观点可能忽略了AI在多个领域的持续进步。本文将探讨为什么我们不应该轻易使用“AI寒冬”这样的说法,并展望2025年作为AI代理之年的潜力。 为何不应轻易使用“…