Java:继承

文章目录

  • 每日一言
  • 1. 什么是继承?
  • 2. 子类怎么访问父类的成员变量?
    • 2.1 不同名的怎么访问?
    • 2.2 同名的怎么访问?
  • 3. 子类怎么访问父类的成员方法?
    • 3.1 不同名的怎么访问?
    • 3.2 同名的怎么访问?
  • 4. 如果我就是想访问同名的父类的成员怎么办?
  • 5. 子类构造方法
  • 6. Java中的继承方式
  • 来小小的总结一下:
  • 结语

每日一言

The best thing to hold noto in life is each other.
生命中最值得珍惜的便是彼此。——奥黛丽·赫本


1. 什么是继承?

答:简单来说,将两个类中的共性提取出来,把它们放到一个新的类中,然后采用继承的思想来达到共用。

让我们来举个栗子:
我们先定义两个类:狗和猫

狗:
在这里插入图片描述
猫:
在这里插入图片描述

通过观察我们发现,这两个对象有相似的地方:
在这里插入图片描述
既然有一些地方是重复的,那我们能不能给他重新创建一个类,把它们都放进去,当我们使用的时候直接从这个类中拿呢?
Of course ,当然可以。

我们可以创建一个新的Animal类:
在这里插入图片描述
那怎么把Cat和Dog与Animal建立联系呢?
答:使用extends关键字
可以这样写:
在这里插入图片描述
在这里插入图片描述
以上就叫做继承。其中我们把Cat和Dog叫做子类(或派生类),Animal叫做父类(或基类超类)。
在这里插入图片描述

注意:

  1. 子类会将父类中的成员变量或者成员方法继承到子类中
  2. 子类继承父类后,子类要有自己特有的成员,不然就没有必要继承了

2. 子类怎么访问父类的成员变量?

2.1 不同名的怎么访问?

让我们来测试一下:
在这里插入图片描述
运行结果:
在这里插入图片描述
通过测试我们发现:子类和父类的成员变量不同名时,我们可以在子类中直接访问父类的成员变量。

2.2 同名的怎么访问?

让我们来测试一下:
在这里插入图片描述

运行结果:
在这里插入图片描述

通过测试我们发现:子类和父类的成员变量同名时,优先访问子类的,如果子类中没有,则去访问父类的。

3. 子类怎么访问父类的成员方法?

以下的问题我就不再测试了,直接写结论了,交给你们来测试一下

3.1 不同名的怎么访问?

答:不同名时,可以直接访问。

3.2 同名的怎么访问?

答:同名时,优先访问子类的成员方法,如果子类中没有就去访问父类的成员方法,如果还是找不到就报错。(编译器懵了qwq)

4. 如果我就是想访问同名的父类的成员怎么办?

Java考虑的很周到,提供了super关键字,我们可以通过super.xxx的方式在子类方法中访问父类的成员。

举个栗子:
在这里插入图片描述
运行结果:
在这里插入图片描述

注意:

  1. super只能在非静态方法中使用,否则报错。
  2. 必须是在子类方法中,访问父类的成员变量或方法。

5. 子类构造方法

当子类继承了父类之后,在实例化子类对象的时候要先帮助父类进行构造(初始化父类的成员)

class Parent {
    public Parent() {
        System.out.println("Parent");//父类构造方法
    }
}

class Subclasses extends Parent{
    public Subclasses() {
        System.out.println("Subclasses");//子类构造方法
    }
}

public class Test {
    public static void main(String[] args) {
        Subclasses subclasses = new Subclasses();
    }
}

以上代码的运行结果:
在这里插入图片描述
我们看到,实例化子类对象时,先调用了父类的构造方法输出了Parent,然后才调用子类的构造方法输出了Subclasses。

可见:
在实例化子类对象的时候先执行父类的构造方法,然后再执行子类的构造方法。

此时有人就要说了:临水,你看看上一个例子中的代码,你的父类没写任何的构造方法,而且在子类中也没有看见哪里调用了父类的构造方法,为啥刚刚写的代码不报错?你这不是搬起石头砸自己的脚么?

诶嘿嘿,不得不说,小伙子观察的挺细致,这是因为在子类构造方法中默认会调用父类的无参构造方法:super()
当用户没有写时,编译器会自动帮你添加。但你要小心了,一旦你写了编译器就不会自动添加了。

注意:super()必须是子类构造方法中的第一条语句,并且它只能出现一次,否则报错。

6. Java中的继承方式

在Java中只支持以下几种继承方式:

  1. 单继承
public class A{
	//.....
}

public class B extends A{
	//.....
}
  1. 多层继承
public class A{
	//.....
}

public class B extends A{
	//.....
}

public class C extends B{
	//.....
}
  1. 不同类继承同一个类
public class A{
	//.....
}

public class B extends A{
	//.....
}

public class C extends A{
	//.....
}

注意:在Java中不支持多继承!

来小小的总结一下:

  1. 继承就是将两个类的共性提取出来,放到一个类中,从而实现代码的简化
  2. 在子类中访问父类的不同名成员时,直接使用就行。
  3. 在子类中访问父类的同名成员时,优先访问子类的。如果就是想访问父类的,需要用super关键字来访问。
  4. 在实例化子类对象的时候先执行父类的构造方法,然后再执行子类的构造方法。
  5. 在Java中支持单继承、多层继承和不同类继承同一个类。但不支持多继承。

结语

请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

编程小白写作,如有纰漏或错误,欢迎指正


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

吴恩达deeplearning.ai:决策树模型

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 文章目录 猫分类例子学习过程 学习算法非常强大的原因之一,是其应用了决策树和树集合,尽管决策树取得了巨大的成功,但是在学术界却没有太多的研究&#x…

【机器学习】进阶学习:详细解析Sklearn中的MinMaxScaler---原理、应用、源码与注意事项

【机器学习】进阶学习:详细解析Sklearn中的MinMaxScaler—原理、应用、源码与注意事项 这篇文章的质量分达到了97分,虽然满分是100分,但已经相当接近完美了。请您耐心阅读,我相信您一定能从中获得不少宝贵的收获和启发~ &#x1f…

如何配置固定TCP公网地址实现远程访问内网MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

用了这些计费方式,代理IP成本减半

“代理IP在现代互联网环境中扮演着重要的角色,它们用于隐藏真实的网络地址,提供更安全和匿名的网络浏览体验。代理IP的成本一直是个令人头疼的问题。” 过去供应商常常采用固定费用的模式,客户无论使用时间长短都需要支付相同的费用&#xff…

[Mac软件]Adobe Illustrator 2024 28.3 intel/M1/M2/M3矢量图制作软件

应用介绍 Adobe Illustrator 是行业标准的矢量图形应用程序,可以为印刷、网络、视频和移动设备创建logos、图标、绘图、排版和插图。数以百万计的设计师和艺术家使用Illustrator CC创作,从网页图标和产品包装到书籍插图和广告牌。 绘制任意大小的标志 拥…

恒丰纸业携手得帆云,构建权威级企业主数据管理平台

本期客户 牡丹江恒丰纸业股份有限公司(简称“恒丰纸业”)是国内首家通过科技部和中科院认定的造纸行业重点高新技术企业,于2001年上海证交所上市交易。 恒丰纸业拥有70年历史底蕴和特种薄页纸研发制造技术,现有生产线21条&#xf…

白酒:勾兑技艺的科学原理与实践技巧

在白酒的酿造过程中,勾兑技艺是至关重要的一环。通过勾兑,酒庄能够将不同类型、不同年份的基酒进行优化组合,以获得理想的口感和品质。许多酒庄在勾兑技艺方面积累了丰富的实践经验,并不断探索科学原理,以提高勾兑技艺…

前端性能优化 | CDN缓存

前言 CDN(Content Delivery Network)是一种分布式的网络架构,通过在全球各地部署节点服务器来快速传输和分发网络内容。CDN的主要目标是提供快速、可靠的内容传输,以提升用户体验。 本文主要从以下方面讲解CDN 什么是CDNCDN的作…

同一交换机下不同网段的终端通信

文章目录 一个有趣的实验 大家都知道不同网段的IP地址要想通信需要通过网关进行路由转发,而一般通过路由器来做默认网关。 一个有趣的实验 一台二层交换机下,连接两个不同网段的PC,实现彼此之间的通信。 一台S3700交换机,两台PC。…

LabelImg:一个简单易用的图像标注工具

目录 LabelImg是什么? 如何使用LabelImg进行图像标注? LabelImg的优势和应用场景 在哪里下载它 随着人工智能技术的不断发展,机器学习和深度学习在图像识别、目标检测等领域中得到了广泛的应用。而要训练一个有效的模型,通常需…

如何提高内存和cpu使用率呢?-Linux类资源

最近公司项目上线时,红蓝线巡检时,部分服务器因配置高但使用率低而需要降级。 为了避免降级,如何增加内存和CPU使用率? 这可以通过脚本来实现。 当前服务器操作系统版本:-7_5。 连接服务器后,登录账号。 …

JVM系列:垃圾回收器(GC)

JVM系列:垃圾回收器(GC) 😀 执行引擎将class文件加载至JVM内存中运行。在运行过程中,需要在内存中动态创建和销毁对象。在传统的C/C语言中,需要手动进行对象销毁以避免内存泄漏。而在Java中,引入…

Leetcode笔记——二叉树的迭代遍历

中序遍历: 定义一个 保存中间量的栈 和一个 结果数组 1. 模板写法 注释版: 背诵版: 前序遍历 1. 中 右 左 的顺序遍历 2. 模板写法,按中 左 右 的顺序遍历 后序遍历 1. 模板写法,按左 右 中 的顺序遍历 注释版&am…

STM32单片机基本原理与应用(十一)

语音识别实验 此实验采用STM32核心板 LD3320模块,通过初始化LD3320并写入待识别关键词,对麦克风说出相应关键词,实现实训平台上的流水灯相应变化的效果。 LD3320 是一颗基于非特定人语音识别 (SI-ASR:Speaker-Indepen…

【深度学习笔记】优化算法——Adam算法

Adam算法 🏷sec_adam 本章我们已经学习了许多有效优化的技术。 在本节讨论之前,我们先详细回顾一下这些技术: 在 :numref:sec_sgd中,我们学习了:随机梯度下降在解决优化问题时比梯度下降更有效。在 :numref:sec_min…

从element-plus 引入ILoadingInstance 出现类型错误

具体报错如下图所示: 1、引入ILoadingInstance 出现错误: 解决问题如下所示: 可能是因为element-plus 多次升级原因,将原来的内部代码多次改下了,原来是loading.type文件,现在变成loading.js,包…

卷积神经网络必备基础

卷积神经网络(Convolutional Neural Network, CNN) 传统的全连接神经网络并不适用于图像处理,这是因为:每个像素点都是一个输入特征,随着层数的增加,参数以指数级增长,而图片的像素点往往非常…

【STM32】HAL库 CubeMX 教程 --- 高级定时器 TIM1 定时

实验目标: 通过CUbeMXHAL,配置TIM1,1s中断一次,闪烁LED。 一、常用型号的TIM时钟频率 1. STM32F103系列: 所有 TIM 的时钟频率都是72MHz;F103C8不带基本定时器,F103RC及以上才带基本定时器。…

2024.3.10 win11系统设置环境变量的方法

2024.3.10 win11系统设置环境变量的方法 win11和其他版本略有区别,以安装maven为例进行操作。 一、鼠标右键点击下拉菜单中选择“个性化” 二、点击个性化中选项后在左侧菜单选择“系统” 三、在右侧系统项目中选择“系统信息” 四、在系统信息中选择“高级系统…

Android将自己写的maven库上传至jitpack(2024靠谱版)

浏览了一堆陈年旧贴,终于实验成功了 第一步 将自建空项目同步至github并保证能正常运行第二步新增一个library类型的modul第三步 在新建的library里面写一些测试用的代码第四步在library的gradle文件增加插件和发布脚本第五步新建一个配置文件第六步 把所有更改push…