【Java继承】(超级详细!!!)

news2024/11/13 9:14:43

【Java继承】(超级详细!!!)

  • 1、 继承的概念
  • 2 、继承的语法
  • 3、 父类成员访问
    • 3.1 子类中访问父类的成员变量
    • 3.2 子类中访问父类的成员方法
  • 4、 super关键字
  • 5 、子类的构造方法
  • 6、 继承关系上的执行顺序
  • 7、protected 关键字
  • 8、继承方式
  • 9、final 关键词

1、 继承的概念

继承机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用

例如:小猫和小狗都是(有名字有年龄要吃饭)的动物。

在这里插入图片描述
上述图示中,Dog和Cat都继承了Animal类。
其中:Animal类称为父类/基类或超类,Dog和Cat可以称为Animal的子类/派生类。
继承之后,子类可以复用父类中成员,子类在实现时只需关心自己新增加的成员即可。

下面我们将学习继承的语法,利用代码实现上述继承关系!

2 、继承的语法

修饰符 class 子类名 extend 父类名(){
     //...
}

在这里插入图片描述

注意:

  • 子类会将父类中的成员变量或者成员方法继承到子类中
  • 子类继承父类之后,必须要新添加自己特有的成员,体现出与基类的不同,否则就没有必要继承了

3、 父类成员访问

3.1 子类中访问父类的成员变量

在这里插入图片描述

  • 如上图a所示:当子类和父类中同时有成员变量a时,访问的是子类的成员变量a
  • 如上图b所示:当子类没有成员变量b,而父类有成员变量b时,访问的是父类的成员变量b
  • 如上图c所示:当子类有成员变量c,父类没有成员变量c时,访问的是子类的成员变量c

注意:
成员变量访问遵循就近原则,自己有优先自己的,如果没有则向父类中找。

3.2 子类中访问父类的成员方法

在这里插入图片描述

  • 如上图test1所示:子类中没有成员方法test1,父类中有成员方法test1,所以访问的是父类中的成员方法test1
  • 如上图test2所示:子类中有成员方法test2,父类中没有成员方法test2,所以访问的是子类中的成员方法test2
  • 如上图test所示:子类和父类都有成员方法test,同样遵循就近原则,访问的是子类的成员方法test

下面我们进行一个小测试,从而使我们更深入的了解该知识点。

//父类
public class Father {
   int a=1;
   int b=1;
   public void test1(int a){
       System.out.println("父类test1,数字结果为:"+a);
   }
   public void test1(){
       System.out.println("父类test1,无参数");
   }

}
//子类
public class Son extends Father{
   int a=2;
   int c=2;
   public void test1()
   {
       System.out.println("子类test1,无参数");
   }
   public void func(){
       test1();
       test1(a+c);
       test1(b+c);
   }
}

//主函数
public class Main {
    public static void main(String[] args) {
        Son son=new Son();
        son.func();
    }
}

打印结果:
子类test1,无参数
父类test1,数字结果为:4
父类test1,数字结果为:3

4、 super关键字

通过上述知识我们知道:当子类和父类中存在相同名称的成员时,访问子类的成员。
那么,,如果要在子类方法中访问父类同名成员时,该如何操作?
此时便需要用到关键词super

这里是引用

  • super只能在非静态方法中使用
  • 在子类方法中访问父类的成员变量和方法

super的用法远不止这些,super的其他方法会在下文中提到。

5 、子类的构造方法

这里是引用

  • 若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构造方法
  • 如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。
  • 在子类构造方法中,super(…)调用父类构造时,必须是子类构造函数中第一条语句。
  • super(…)只能在子类构造方法中出现一次,并且不能和this同时出现

6、 继承关系上的执行顺序

//父类
public class Father1 {
    int a;
    int b;
    //构造方法
    public Father1(int a, int b) {
        this.a = a;
        this.b = b;
        System.out.println("父类,构造方法");
    }
    {
        System.out.println("父类,实例方法");
    }
    static {
        System.out.println("父类,静态方法");
    }
}
//子类
public class Son extends Father1 {

    public Son(int a, int b) {
        super(a, b);
        System.out.println("子类,构造方法");
    }
    {
        System.out.println("子类,实例方法");
    }
    static {
        System.out.println("子类,静态方法");
    }
}
//主方法
public class Main {
    public static void main(String[] args) {
        Son son=new Son(1,2);
        System.out.println("=============");
        Son son1=new Son(1,2);
    }
}

打印结果:
父类,静态方法
子类,静态方法
父类,实例方法
父类,构造方法
子类,实例方法
子类,构造方法
=============
父类,实例方法
父类,构造方法
子类,实例方法
子类,构造方法

由上述代码可以得出结论:

  • 首先依次执行父子类的静态方法
  • 接着依次进行父类的实例方法和构造方法
  • 最后依次进行子类的实例方法和构造方法
  • 静态方法只执行一次

7、protected 关键字

在这里插入图片描述

1.同一包中的同一类
在这里插入图片描述

2.同一包的不同类
在这里插入图片描述

3.不同包中的子类
在这里插入图片描述

4.不同包中的非子类
在这里插入图片描述

8、继承方式

在这里插入图片描述

注意:Java不能实现多继承!!!

9、final 关键词

1.final 修饰变量或字段
在这里插入图片描述
2.final 修饰类
在这里插入图片描述
3.final 修饰方法
在这里插入图片描述

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

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

相关文章

vscode在Ubantu键位错乱问题

摘要:抄的vscode键位错乱_有没有在使用vscode时偶尔遇到退格键无法正常删除内容的情况?如果有的话,你是如何-CSDN博客 只是作为记录,查找方便

Python使用MQTT连接新版ONENet

Python MQTT 连接新版ONENet 简介 前几个教程我们使用mqtt.fx连接了新版的ONENet, 只是跑通了MQTT协议,但是在实际操作下还需要实现具体环境、具体设备的MQTT连接,本章教程将以Python MQTT的方式连接 ONENet 参考文档: paho-mqtt PyPI …

左外连接和右外连接的区别?举例说明——以力扣sql 1378. 使用唯一标识码替换员工ID为例

左外连接(LEFT JOIN)和右外连接(RIGHT JOIN)的主要区别在于哪个表的所有行会保留在结果集中 1. 左外连接 (LEFT JOIN) 左外连接会返回左表中的所有行以及右表中符合连接条件的行。如果右表中没有匹配的行,结果集中右…

Livox-SDK2 用vs2017编译

Livox-SDK2 Livox-SDK2代码去上面下载,文章中给出的是用vs2019进行编译的,生成项目时用的 > cmake .. -G "Visual Studio 16 2019" -A x64 但如果我想用vs2017进行编译,那么只需要将上面语句改为如下: cmake .. -…

外贸软件工艺品行业版,解决管理难点,助力降本增效

随着全球经济的不断发展和贸易自由化程度的提高,我国工艺品出口贸易面临着广阔的市场空间和良好的发展机遇。同时,我国工艺品以其独特的文化内涵和精湛的制作工艺,赢得了全球消费者的喜爱和认可,为我国外贸发展作出了重要贡献。 …

【Linux 网络】网络基础(三)(数据链路层协议:以太网协议、ARP 协议)

一、以太网 两个不同局域网的主机传递数据并不是直接传递的,而是通过路由器 “一跳一跳” 的传递过去。 跨网络传输的本质:由无数个局域网(子网)转发的结果。 所以,要理解数据跨网络转发原理就要先理解一个局域网中数…

MagicaCloth2中文文档

提示:经搬运者测试,在ecs1.0中运行最为良好 如何安装 英语日语 目录 [隐藏] 1 如何安装2 样本运行测试3 可以删除示例文件夹4 如何更新5 发生错误时该怎么办6 如何卸载7 如何检查版本 如何安装 MagicaCloth2 需要 Unity 2021.3.16 (LTS&…

对比表征学习(二)Setence Embedding

参考翁莉莲的Blog,本章主要阐述句子嵌入(sentence embedding) 文本扩增 绝大部分视觉应用中的对比方法依赖于创造每个图像的增强版本,但是在句子扩增中会变得非常有挑战性。因为不同于图片,在扩增句子的同时非常容易改…

刷题记录5.22-5.27

文章目录 刷题记录5.22-5.2717.电话号码的字母组合78.子集131.分割回文串77.组合22.括号生成198.打家劫舍---从递归到记忆化搜索再到递推动态规划背包搜索模板494.目标和322.零钱兑换牛客小白月赛---数字合并线性DP1143.最长公共子序列72.编辑距离300.最长递增子序列状态机DP12…

基于 Pre-commit 的 Python项目代码风格统一实践

背景信息 统一代码风格首先需要定义参照的规范,每个团队可能会有自己的规范,我们选择的规范是 yapf mypy isort,如果保证所有的研发人员都遵循相关规范呢? 鼓励 IDE 中对应的插件的安装,通过直接对应的插件&#x…

Java毕业设计 基于springboot vue考勤管理系统

Java毕业设计 基于springboot vue考勤管理系统 SpringBoot 考勤管理系统 功能介绍 员工 登录 个人中心 修改密码 个人信息 员工请假管理 员工出差管理 薪资管理 员工签到管理 公告管理 管理员 登录 个人中心 修改密码 个人信息 员工管理 员工请假管理 员工出差管理 薪资管理…

Linux修炼之路之自动化构建工具,进度条,gdb调试器

目录 一:自动化构建工具make/makefile 生成内容: 清理内容: 对于多过程的: 对于多次make: 特殊符号: 二:小程序之进度条 三:git的简单介绍 四:Linux调试器gdb 接…

2024年蓝桥杯B组C++——复盘

1、握手问题 知识点:模拟 这道题很简单。但是不知道考试的时候有没有写错。一开始的43个人握手,仅需要两两握手,也就是从42个握手开始,而非43.很可惜。这道题没有拿稳这5分。也很有可能是这5分导致没有进决赛。 总结&#xff1a…

调用萨姆索诺夫函数:深入探索函数的参数与返回值

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、萨姆索诺夫函数的引入与调用 二、如何获取函数的返回值 三、无参数与无返回值的函数调…

06_Tomcat

文章目录 Tomcat1.概念2.Tomcat安装3.Tomcat项目结构4.标准web项目结构5.Tomcat部署项目方式6.IDEA关联Tomcat6.1 构建tomcat和idea关联6.2 使用idea创建一个Javaweb工程6.3 使用idea将工程**构建**成一个app6.4 使用idea将构建好的app**部署**到tomcat中 Tomcat 1.概念 Tomc…

《浪姐》也搞live直播,真成综艺流量密码了?

继《歌手》之后,芒果的另一档综艺《浪姐》也将开启直播。 《乘风2024》官博宣布进行突击加场直播赛,姐姐们将面临全开麦live直播,摇人投票排在前十的姐姐获得live直播抢先权。 这是看《歌手2024》直播赛制火了,也想蹭个热度搞直…

拓展海外市场,助力中国海外运营企业实现全球化发展——工博科技SAP出海数字化解决方案

近年来,在全球化浪潮下,中国出海企业正从简单的产品扩张向更加成熟的跨国经营及全球化发展转变。中资企业要积极拓展国际市场、加大步伐融入全球的生态,打造韧性供应链,但面对风云变幻的国际形势,需要提高自身的风险管…

Java绩效考核系统源码 springboot员工绩效考核系统源码

Java绩效考核系统源码 springboot员工绩效考核系统源码-009 源码下载地址:https://download.csdn.net/download/xiaohua1992/89352195 项目介绍 本系统的功能分为管理员和员工两个角色 管理员的功能有: (1)个人中心管理功能&a…

基于Pytorch框架的深度学习ShufflenetV2神经网络十七种猴子动物识别分类系统源码

第一步:准备数据 17种猴子动物数据: self.class_indict ["白头卷尾猴", "弥猴", "山魈", "松鼠猴", "叶猴", "银色绒猴", "印度乌叶猴", "疣猴", "侏绒"…

DDR、LPDDR和GDDR的区别

1、概况 以DDR开头的内存适用于服务器、云计算、网络、笔记本电脑、台式机和消费类应用,支持更宽的通道宽度、更高的密度和不同的形状尺寸。 以LPDDR开头的内存适合面向移动和汽车这些对规格和功耗非常敏感的领域,提供更窄的通道宽度和多种低功耗运行状态…