Java基础语法之继承

news2024/10/7 11:29:48

为什么要继承

会发现,狗和猫只有叫声不同,因为它们都是动物,会有相同的属性和行为,所以它们可以继承animla类

如何继承

用到extends关键字

这样就会简化好多

注意

1.Animal称为父类/超类/基类;dog,cat称为子类/派生类

2.继承父类后,必须要添加自己的成员,否则没必要继承

3.继承的作用:实现代码的复用

父类成员的访问

父类成员变量与子类不同名时

a=10;b=20;都是访问从父类继承下来的成员

c=30是访问子类自己的

父类与子类成员变量同名时

此时a=10是访问的自己的a

父类与子类成员方法同名时

总结

对父类成员的访问遵循就近原则,当父类子类的成员变量或方法同名时,就会访问子类的。

但如果成员名相同时,我就想访问父类的,该如何操作呢?

super关键字

作用:在子类中访问父类的成员

分割线上方都是Derived类内部的方法打印的,分割线下方是main方法打印的,这是因为引用a的类型是Derived,所以遵循就近原则,找到了子类中的a

注意

1.同this关键字一样,super只能在非静态方法中使用,所以在main方法中不能用到super和this

2.但是,静态的成员变量和方法也可以访问,只不过不推荐,静态的成员变量和方法一般通过类名来访问

子类构造方法

父子父子,先有父再有子,即:子类对象构造前,要先调用基类的构造方法。

我们自己没有给子类写构造方法时,编译器会默认添加上如下的构造方法

看似什么都没有,实际上这个方法的第一句是隐藏的super();这就是调用父类的构造方法,如下

当实例化son这个对象时,就会调用子类的构造方法,同时会在第一条语句执行隐藏的父类构造方法

构造方法的重载

注意看,下面的第四行代码报错了,这是为什么?

因为在父类中,我们重写了一个带参数的构造方法,所以编译器就不会默认提供不带参数的构造方法,同时,在子类的构造方法中隐藏的super()这样的调用语句就不起作用了

那如何解决?法一:在父类中写一个不带参数的构造方法。法二:在子类的构造方法中调用父类带参数的构造方法(注意,这个调用语句必须是在第一行)。如下俩种解决方案

用this在构造方法中调用其他构造方法

这个结果是什么呢?

注意,第一个被调用的子类构造方法的第一句会默认添加super(),而接下来调用的子类构造方法就不会再添加super(),因为构造方法对于一个对象只执行一次

再谈有初始化作用的代码块

没有继承关系时

静态代码块先执行,然后是实例代码块,最后是构造方法

静态代码块是在类加载时执行,不管有没有对象,不管有几个对象,只要这个类被提到了,他就执行且只执行一次

当有了对象的创建时,实例代码块才执行,最后是构造方法

有继承关系时

静态代码块优先执行,然后是父类的实例(构造方法不是静态的,也可以看作实例),最后是子类的实例

这是因为静态代码块在类加载时就执行,当编译器遇到Derived时,它会先找到父类先加载父类,然后加载子类,最后才开始创建对象,创建时还是遵循父类优先原则,先通过实例代码块和构造方法将父类中的值初始化以供子类使用,最后再对子类对象初始化。

父类中不同访问权限的成员在子类中的可见性

当父类和子类在同一个包中时

只有a是不可以被直接访问的,

当父类和子类在不同包中时

注意要用import导入父类所在的包

此时a和b都不可见,因为b是默认权限,只能在同一个包当中访问,c是可见的,因为protected修饰后,在同一个包中可以用,在不同包的子类中也可以用

final关键字

final关键字可以用来修饰变量,成员方法以及类

1.修饰变量,表示常量,不可以修改,不论是局部变量还是成员变量,都一样不可修改

2.修饰类,表示此类不能被继承

3.修饰方法,表示此方法不能被重写

继承与组合

继承是is-a的关系,比如狗是动物

组合是has-a的关系,比如汽车有什么

下面是一个学校类,里面有学生类,老师类,员工类

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

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

相关文章

多项目同时进行如何做好进度管理?

许多企业都面临着同时进行多个项目的情况,因此项目经理经常需要管理多个项目。多项目管理的难点不仅在于项目数量增加,还在于资源分配不均、难以监控多个项目进度以及复杂的沟通协作。 一、从项目经理的角度分析 首先,要把握高效项目管理的几…

Jmeter接口自动化测试 —— Jmeter变量的使用

​在使用jmeter进行接口测试时,我们难免会遇到需要从上下文中获取测试数据的情况,这个时候就需要引入变量了。 定义变量 添加->配置元件->用户自定义的变量 添加->配置元件->CSV 数据文件设置 变量的调用方式:${变量名} 变量的…

融了超24亿一分钱不花,放银行吃利息,这家存储创企厉害了

​引言:AI与大模型风起云涌,催生了这匹存储“黑马” 【全球存储观察 | 科技热点关注】 这家总部设在美国的存储初创公司,真的赶上AI与大模型时代的风口了。Vast Data公司最新再次获得E轮融资1.18亿美元,但是这个存储…

玩转Docker(二):centos7安装Docker

文章目录 一、安装Docker(centos7)二、运行第一个容器 环境选择: (1)管理工具:Docker Engine。使用最广泛。 (2)runtime:runc。Docker的默认runtime。 (3&…

【开源软件】最好的开源软件-2023-第25名 nbdev

自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…

智能优化算法应用:基于蜻蜓算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于蜻蜓算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蜻蜓算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜻蜓算法4.实验参数设定5.算法结果6.参考文献7.MA…

科技赋能医疗设备管理提质增效,实现医院高质量发展

近日,苏州阿基米德网络科技有限公司与医疗领域头部级媒体健康界,联合举办“数智为擎 提质增效——医学装备智慧管理创新发展论坛”的直播活动。 直播现场,来自上海交通大学医学院附属同仁医院、中华医学会航海医学分会、苏州阿基米德的专家们…

【ret2hbp】一道板子测试题 和 SCTF2023 - sycrpg

前言 ret2hbp 主要是利用在内核版本 v6.2.0 之前,cpu_entry_area mapping 区域没有参与随机化的利用。其主要针对的场景如下: 1)存在任意地址读,泄漏内核地址 2)存在无数次任意地址写,泄漏内核地址并提权…

Linux下网络通信及socket编程

文章目录 网络通信socket应用编程函数介绍IP地址转换函数程序源代码程序执行结果 网络通信 网络通信本质上是一种进程间通信,是位于网络中不同主机上的进程之间的通信。网络通信大致分为以下三层。 在硬件层,两台主机都提供了网卡设备,满足…

ADC学习总结

ADC的架构分类: 1、Delta-Sigma 采样率一般是在1M以内,位数一般可以做的很高,比如24位,Delta-Sigma ADC采用了过采样技术,不需要在模拟输入端加抗混叠滤波,由后端数字滤波器进行处理,通过信噪…

DDD领域驱动架构设计学习网站和开源框架

文章目录 介绍1、国外Axon2、阿里Cola 介绍 近年来,关于DDD的讨论越来越多,关于网上的文章很多都是理论上的介绍,由于自己最近也在学习相关知识,所以分享几个关于DDD落地的开源框架。 1、国外Axon Axon是国外一款比较系统的DDD…

Re59:读论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 模型开源地址:https://huggingface.co/facebook/rag-token-nq ArXiv下载地址:https://arxi…

高校刮起元宇宙风!3DCAT实时云渲染助力川轻化元校园建设

元宇宙,是一个虚拟的网络世界,它与现实世界相互连接,为人们提供了一个身临其境的数字体验。元宇宙的概念并不新鲜,早在上个世纪就有科幻作家和电影导演对它进行了想象和创造。但是,随着科技的发展,特别是5G…

iic应用篇

一.iic的优点 1. IIC总线物理链路简单,硬件实现方便,扩展性非常好(1个主机控制器可以根据需求增加从机数量,同时删减从机数量也不会影响总线通信);IIC总线只需要SDA和SCL两条信号线,相比于PCI/…

python和pygame实现烟花特效

python和pygame实现烟花特效 新年来临之际,来一个欢庆新年烟花祝贺,需要安装使用第三方库pygame,关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 效果图及源码 先看效果图&#xff1a…

c#异常强大的统计运行时间功能,一行代码,监控 C# 方法执行耗时

MethodTimer.Fody MethodTimer.Fody 是一个功能强大的库,可以用于测量 .NET 应用程序中的方法的执行时间。 它使用 Fody 插件框架可以无缝集成到您的项目中,所以向代码中添加性能测量功能变得非常容易。 如何使用 首先,需要安装 Nuget 包&am…

程序员必备的十种排序算法

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

MS913/914 25-100MHz 10/12 位用于平面显示器链路Ⅲ的具有直流平衡编码和双向控制通道的串化器和解串器

MS913/MS914 芯片组是 25MHz~100MHz 10 位/12 位 FPD Link III SER/DES(串化器/解串器),它提供高速 FPD-Link III 接口和高速正向通路以及用于差分对上数据发送的双向 控制通路。广泛应用于车载摄像,医疗设备,管道探测等领 域。 主要特点…

改进的A*算法的路径规划(2)

子节点优化选择策略 (1)子节点选择方式 为了找到从起始点到终点的路径,需定义一种可以选择后续节点的方式。在 A*算法中两种常见的方法为4-邻接(见图5-7(a) 和8-邻接(见图5-7(b)), 但考虑到 在复杂越野环境上,我们希望智能车辆允许更多的自由运动来更…

20231210原始编译NanoPC-T4(RK3399)开发板的Android10的SDK

20231210原始编译NanoPC-T4(RK3399)开发板的Android10的SDK 2023/12/10 17:27 rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ mkdir nanopc-t4 rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ cd nanopc-t4/ …