继 承

为什么要有继承,继承的作用?

继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。

作用:进行共性抽取,实现代码的复用

//代码一
public class Cat {public String name;public int age;public void meow(){System.out.println(this.name + "喵喵叫");}
}
//代码二
public class Dog {public String name;public int age;public void bark(){System.out.println(this.name + "汪汪叫");}
}

对上述代码一和代码二,我们不难发现他们有着共同字段 name 和 age,因此可以将两段代码的共性抽取出来,放到Animal类中,如下

public class Animal {public String name;public int age;
}

这样就将共性抽取了出来,如果以后还有别的动物需定义一个类,就可以继承Animal类,从而达到代码的复用。那么怎么写继承呢?请看下文。

语法

表示类之间的继承关系,用 extends 关键字。

修饰符 class 子类/派生类 extends 父类/基类/超类{
}//例
public class Animal {public String name;public int age;
}public class Cat extends Animal{//将Animal类字段name和age继承过来且有自己的成员public void meow(){System.out.println(this.name + "喵喵叫");}
}
  1. 子类会将父类中的成员变量或成员方法继承到子类中
  2. 子类继承父类后,需添加自己特有的成员,体现出与父类不同,否则没必要继承

子类访问父类成员

  1. 子类访问父类成员变量
    当父类和子类拥有同名的成员变量时,优先访问子类成员变量,若要在子类中访问与父类同名的成员变量,则需借助super关键字==(super.成员变量)==
  2. 当父类和子类拥有同名成员方法时,优先访问子类成员方法,若要在子类中访问与父类同名的成员方法,则需借助super(super.成员方法

子类构造方法

子类对象构造时 ,需先调用基类构造方法,来帮助基类成员方法初始化,然后执行子类构造方法

public class Animal {public String name;public int age;public Animal(String name,int age){this.name = name;this.age = age;}
}public class Dog extends Animal{public Dog(String name,int age){super(name,age);//用super(参数列表名)来调用父类构造方法,帮助父类成员进行初始化System.out.println("==构造方法执行==");}public void bark(){System.out.println(this.name + "汪汪叫");}
}public class Test {public static void main(String[] args) {Dog dog = new Dog("dog",2);}
}

在这里插入图片描述

上述代码中,Dog类这个子类中调用了构造方法(子类构造方法),那么就需要先调用父类的构造方法(用super(参数列表)),也就是Animal类的构造方法来帮助Animal类的成员初始化,然后再继续执行子类构造方法,打印出构造方法执行。

注意:构造方法中 super(参数列表)或 this(方法名)都必须放在构造方法中的第一行,且不能在静态方法中使用

如果父类没有定义构造方法或者定义了无参的构造方法,那么子类构造方法第一行会有隐藏的super()调用(子类构造方法执行前会先调用父类的构造方法【用super()调用】,如果父类没有显示定义构造方法,则Java会提供默认的不带参数的构造方法)

代码块执行顺序

  1. 静态代码块先执行且只执行一次,在类加载阶段执行
  2. 当有对象创建时,执行实例代码块,后执行构造方法

当有父类和子类时,先执行父类和子类的静态代码块,再执行父类的实例代码块和构造方法,再执行子类的实例代码块和构造方法,且如果是第二次实例化子类对象时,父类和子类的静态代码块不会再执行(静态代码块只执行一次)

//父类
public class Father {public String name;public int age;static {System.out.println("父类静态代码块");}{System.out.println("父类实例代码块");}public Father(String name,int age){this.name = name;this.age = age;System.out.println("父类构造方法");}
}//子类
public class Son extends Father{static {System.out.println("子类静态代码块");}{System.out.println("子类实例代码块");}public Son(String name,int age){super(name,age);System.out.println("子类构造方法");}
}//测试类
public class Test {public static void main(String[] args) {Son son = new Son("dog",3);System.out.println("===========================");//分割线Son son2 = new Son("cat",2);}}

在这里插入图片描述

有上述代码和运行结果可知上文所说的执行顺序以及静态代码块只执行一次

继承方式

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

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

相关文章

【人工智能】—基于成都市各区(市)县租房价格预测建模研究

引言 随着城市化进程的加速,人口流动日益频繁,租房市场作为城市生活的重要组成部分,其价格波动对居民生活质量和城市经济发展具有显著影响。成都市,作为中国西部地区的经济、文化、交通和科技中心,近年来吸引了大量人…

为什么独立站需要高质量的GPB外链?

独立站需要高质量的GPB外链,主要是因为它们能显著提升网站的可信度和可见性。高质量的外链相当于得到其他权威网站的认可和推荐,这会让搜索引擎认为你的内容有价值,从而提升你的搜索排名。试想一下,当其他有影响力的网站愿意链接到…

请求接口在控制台报cors跨域问题

我的问题是:BASE_URL没有和本地IP设置一致 刚开始:(这个不是我本地电脑的地址) 所以我要把:这个地址改为我本地电脑的ip(http://192.168.2.50:8087) BASE_URL: http://localhost:8087/api/ 或…

单位电脑文档怎么加密?哪种方法最有效?

单位电脑文档的加密是保障信息安全的重要措施之一,它可以防止未经授权的访问和数据泄露。 选择最佳的加密方法取决于您的具体需求,包括文档的敏感程度、加密的便捷性、成本、以及是否需要跨平台兼容性。下面是几种常见的加密方法及其优缺点,…

昇思学习打卡-8-FCN图像语义分割

目录 FCN介绍FCN所用的技术训练数据的可视化模型训练模型推理FCN的优点和不足优点不足 FCN介绍 FCN主要用于图像分割领域,是一种端到端的分割方法,是深度学习应用在图像语义分割的开山之作。通过进行像素级的预测直接得出与原图大小相等的label map。因…

若依微服务初始化搭建教程

文章目录 🥝从Gitee拉取代码🍄初始化项目配置配置项目maven配置项目JDKmaven - clean - install 🍒数据源配置创建config / seata数据库创建ry-cloud数据源导入ry-cloud数据 🍰启动Nacos下载Nacos修改Nacos配置双击startup.cmd启动…

GraphRAG:AI的全局文本理解革新

前言 在人工智能领域,处理和理解大量文本数据始终是一个挑战。随着大型语言模型(LLMs)的出现,自动化地进行复杂的语义理解和文本摘要变得可能。检索增强生成(RAG)方法因其能有效结合检索与生成技术&#x…

C++基础语法之重载引用和命名空间等

1.C关键字 c的关键字比我们的c语言的关键字多,c包容C语言并对C语言进行了补充,但是我们对关键字的学习是在我们后面逐渐学习的。这里我们的只是提供一个表格对齐了解一下。 2.命名空间 我们c出现了命名空间的概念,用关键字namespace来定义。…

论文阅读 - Intriguing properties of neural networks

Intriguing properties of neural networks 经典论文、对抗样本领域的开山之作 发布时间:2014 论文链接: https://arxiv.org/pdf/1312.6199.pdf 作者:Christian Szegedy, Wojciech Zaremba, Ilya Sutskever, Joan Bruna, Dumitru Erhan, Ian Goodfellow,…

信息技术课堂上如何有效防止学生玩游戏?

防止学生在信息技术课堂上玩游戏需要综合运用教育策略和技术手段。以下是一些有效的措施,可以用来阻止或减少学生在课堂上玩游戏的行为: 1. 明确课堂规则 在课程开始之初,向学生清楚地说明课堂纪律,强调不得在上课时间玩游戏。 制…

电阻负载柜的工作原理是什么?

电阻负载柜是用于模拟电网中各种负载特性的设备,广泛应用于电力系统、新能源发电、电动汽车充电站等领域。其工作原理主要包括以下几个方面: 1. 结构组成:电阻负载柜主要由变压器、调压器、电阻器、控制器、保护装置等部分组成。其中&#xf…

理解神经网络的通道数

理解神经网络的通道数 1. 神经网络的通道数2. 输出的宽度和长度3. 理解神经网络的通道数3.1 都是错误的图片惹的祸3.1.1 没错但是看不懂的图3.1.2 开玩笑的错图3.1.3 给人误解的图 3.2 我或许理解对的通道数3.2.1 动图演示 1. 神经网络的通道数 半路出嫁到算法岗,额…

数据防泄密软件精选|6款好用的数据防泄漏软件强推

某科技公司会议室,CEO张总、CIO李总、信息安全主管王经理正围绕最近发生的一起数据泄露事件展开讨论。 张总(忧虑): 大家,这次的数据泄露事件对我们来说是个沉重的打击。客户信息的外泄不仅损害了我们的信誉,还可能面…

DAY2:插件学习

文章目录 插件学习ClangGoogle TestCMakeDoxygen 收获 插件学习 Clang 是什么:Clang 是指 LLVM 项目的编译器的前端部分,支持对 C 家族语言(C、C、Objective-C)的编译。Clang 的功能包括:词法分析、语法分析、语义分析、生成中间中间代码 L…

【源码+文档+调试讲解】智能仓储系统 JSP

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,智能仓储系统当然也不能排除在外。智能仓储系统是以实际运用为开发背景,运用软件工程开发方法,采…

小车解决连接 Wi-Fi 后还不能上网问题

小车解决连接 Wi-Fi 后还不能上网问题 跟大家讲讲:为什么小车连接我们自己的热点以后还是不能联网呢? 小车连接我们的热点以后需要访问外面的网络,我们访问网络使用域名来进行的,所以要对域名进行解析,但是小车原来的域…

猫咪浮毛太多怎么处理?6年铲屎官最值得买的猫毛空气净化器分享

作为一位拥有6年铲屎经验的铲屎官,家中既有宝宝又有毛孩子的铲屎官家庭来说,空气中的宠物异味和猫毛不仅影响生活质量,更关乎家人的健康。普通空气净化器虽然能够提供基本的空气净化,但对于养猫家庭的特定需求,如去除宠…

使用 YOLOv8 实现人体姿态检测

引言 在计算机视觉的各种应用中,人体姿态检测是一项极具挑战性的任务,它能够帮助我们理解人体各部位的空间位置。本文将详细介绍如何使用 YOLOv8 和 Python 实现一个人体姿态检测系统,涵盖模型加载、图像预处理、姿态预测到结果可视化的全流…

《基于 Kafka + Flink + ES 实现危急值处理措施推荐和范围校准》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 近期刚转战 CSDN,会严格把控文章质量,绝不滥竽充数,欢迎多多交流。&am…

爬虫-豆瓣读书排行榜

获取数据 requests库 获取数据环节需要用到requests库。安装方式也简单 pip install requests 爬取页面豆瓣读书 Top 250 用requests库来访问 import requests res requests.get(https://book.douban.com/top250/) 解析: 导入requests库调用了requests库中的…