当前位置: 首页 > news >正文

Java-继承与多态-上篇

关于类与对象,内容较多,我们分为两篇进行讲解:

📚 Java-继承与多态-上篇:———— <就是本篇>

📕 继承的概念与使用

📕 父类成员访问

📕 super关键字

📕 super 与 this 的区别

📕 子类构造方法

📕 继承方式

📕 final 关键字

📚 Java-继承与多态-下篇:———— <下篇很快,别急别急>

📕 ... ...

① 继承的概念

首先提到"继承",大家心里想到的是什么?大概和我初听"继承"时一样,也是想到了"父 与 子"。如果大家也有这样的想法,那我要告诉大家,这是对的~

📌 继承的定义:

📕继承是面向对象编程的重要概念, 它允许一个类(子类)继承另一个类(父类)的属性和方法。

📚 那么我们思考一个问题:

我们之前学习"类与对象"的时候,经常使用"学生类"来进行举例,在我们仅仅使用"学生类"时,确实不会出现什么错误,也很少有代码的冗余但如果我们在定义"学生类"后,我们还想定义"小学生","初中生","高中生","大学生",又该怎么办呢?

在我们学习继承之前,那肯定就是对这四种年级的学生分别进行定义了:

但是"小学生","初中生","高中生","大学生"都有学号,成绩,年龄,名字。而且也都会吃饭,睡觉,学习大部分的属性和行为都是重复的,而只有很少一部分内容是不重复的,这就会造成非常多的冗余代码:

那么此时,我们就可以让"小学生","初中生","高中生","大学生"去"继承"我们的"学生类",从而做到代码的复用,而尽可能地减少代码的冗余~让我们继续往下看:

② 继承的使用

📚 继承的用法

📕 Java继承的用法是通过使用关键字 extends子类父类建立继承关系。

📕 子类会继承父类的属性和方法,并可以根据需要重写父类的方法或添加新的方法和属性。

class 父类 {// 父类的属性和方法
}class 子类 extends 父类 {// 子类的属性和方法
}

接下来我们看一看,如何使用继承的方法,去让"小学生","初中生","高中生","大学生"去"继承"我们的"学生类":

使用图片的表述大概是这样的

📌 而具体应该如何用代码实现呢:

这就是"小学生","初中生","高中生","大学生"去"继承学生类"的大体代码了~

③ 父类成员访问

了解了继承的大体使用方法,接下来让我们对"继承"进行更深的一些了解:

1.子类中访问父类的成员变量

📚 子类可以访问父类的非私有成员变量(包括公有受保护默认访问权限的成员变量)。子类可以通过继承获得父类的成员变量,并且可以直接使用它们。

📌 而通过子类中访问父类的成员变量,分为两种情况:

📕 子类和父类不存在同名成员变量:

这就证实了:子类可以通过继承获得父类的成员变量,并且可以直接使用它们。

📕 子类和父类存在同名成员变量:

📌 注意事项

📕 如果访问的成员变量子类中有优先访问自己的成员变量

📕 如果访问的成员变量子类中无则访问父类继承下来的如果父类也没有定义,则编译报错

📕 如果访问的成员变量与父类中成员变量同名则优先访问自己的

2.子类中访问父类的成员方法

而子类中访问父类成员方法,其实与访问成员变量也是大同小异:

📚 子类可以通过继承来访问父类的成员方法。子类可以直接调用父类的非私有方法,并且可以在子类中进行重写。

📌 通过子类中访问父类的成员方法,分为两种情况:

📕 成员方法名字不同

📕 成员方法名字相同

📌 注意事项

📕 通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问

📕 否则在父类中找,找到则访问,否则编译报错。

📕 如果父类和子类同名方法的参数列表不同(重载),根据调用 方法适传递的参数选择合适的方法访问,如果没有则报错

④ super关键字

super关键字的主要作用:

📕 用于表示父类的引用:它可以用于调用父类的构造方法、访问父类的成员变量和方法。

super调用父类的构造方法:

super访问父类的成员变量和方法:

📌 注意事项

📕 只能在非静态方法中使用:

📕 在子类方法中,访问父类的成员变量和方法

⑤ 子类构造方法

和"继承"这个词一样,"父类"与"子类"也有同样的关系,那就是:先有父类,后有子类

所以在子类对象构造时,会先调用子类构造方法,然后执行子类的构造方法。

📚 子类的构造方法可以通过使用super()关键字来调用父类的构造方法,以初始化从父类继承的成员变量。

📌 子类的构造方法可以有以下几种使用情况:

📕 子类调用父类的无参构造方法

📕 子类调用父类的有参构造方法

📌 那么父类与子类的构造方法都有什么关联呢

📕 当我们定义无参构造方法时,子类构造方法第一行会有隐藏起来的一个super()调用

我们可以看到子类构造方法中并无super(),但仍不报错~这就证明了子类构造方法第一行会有隐藏起来的一个super()调用。

📕 当我们定义有参构造方法时,我们需要重新手动写一下子类构造方法中的super()

我们可以看到,此时代码是报错的,所以我们需要重新写一个对应的super():

这样就ok了~

📕 子类构造方法中调用父类构造方法时,super()必须在开头位置:

📕 在同时调用父类和子类方法时,同一类型情况下父类优先级大于子类:

我们可以看到,先打印了"父类...",后打印了"子类..."。

既然我们在"类和对象"的学习中我们学习到了代码块,那我们也用用代码块:

📕 然后我们可以看一个小例题:(记得回忆一下上篇文章中,我们讲到的代码块优先级哦~)

import java.util.*;
class Animal {public String name;static{System.out.println("父类静态代码块");}{System.out.println("父类实例代码块");}public Animal() {System.out.println("父类构造方法");}
}
class Dog extends Animal {static{System.out.println("子类静态代码块");}{System.out.println("子类实例代码块");}public Dog() {System.out.println("子类构造方法");}
}
public class Main {public static void main(String[] args) {Dog dog = new Dog();}
}

运行后的结果是:

📌 知识归纳

📕 父类的静态代码块优先级高于子类的静态代码块

📕 父类的实例代码块与构造代码块先后接连执行

📕 子类的实例代码块与构造代码块先后接连执行

⑥ super 和 this 的区别

上述内容观看完毕后,我们也算是把 super 和 this 关键字都学习到了,那么两者看似极为的相似,但却也有许多的不同之处:

  • this关键字用于引用当前对象的成员,而super关键字用于引用父类对象的成员。
  • this在实例方法和构造方法中使用,而super主要在子类中使用。
  • this可以引用当前对象的成员变量和方法,super可以引用父类的成员变量和方法。
  • this可以用于在构造方法中调用其他构造方法,super可以用于在子类构造方法中调用父类构造方法。
  • this和super不能同时使用,因为它们都是用来引用对象的关键字。

相同点:

  • 都是 Java 的关键字
  • 都只能在非静态方法中使用
  • 在构造方法中使用时,都只能在第一行,且不能同时存在

不同点:

  • this是当前对象的引用,而super关键字用于引用父类对象
  • 在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性
  • 在构造方法中:this(...)用于调用本类构造方法,super(...)用于调用父类构造方法,两种调用不能同时在构造 方法中出现
  • 构造方法中一定会存在super(...)的调用,用户没有写编译器也会增加,但是this(...)用户不写则没有

⑦ 继承方式

Java中不支持多继承,就像一个"儿子"不能有两个"爹"~

但Java虽然不支持多继承,但就不代表它不能"多个继承"了,为了弥补这个缺陷,Java支持了"多层继承":

而Java同样也支持"单继承"和"不同类继承同一类",而这两种情况在之前我们多次举"学生类"的例子时就都接触过了,这里也就不浪费大家的时间啦

⑧ final 关键字

final 是一个关键字,用于修饰类、方法和变量,具有不同的作用和效果。

📚 final 修饰变量:

📕 当使用 final 修饰一个变量时,该变量被称为常量它的值不能被改变:

📕 对于基本类型的变量,一旦被赋值后就不能再被修改。

📕 对于引用类型的变量,一旦被赋值后,不能再指向其他对象,但对象本身是可以被修改的:

输出结果:

📚 final 修饰成员方法:

📕 当使用 final 修饰一个方法时,该方法不能被子类覆盖(即不能被重写):

📕 使得某个方法的实现是不可改变的,提高了安全性和稳定性。

📚 final 修饰类:

📕 当使用 final 修饰一个类时,该类不能被继承,即不能有子类:

那么这篇关于(继承与多态-上篇)的知识,就暂时为大家分享到这里啦,作者能力有限,如果有哪里说的不够清楚或者不够简洁,还请大家在评论区多多指出,那么我们下期再见啦~

相关文章:

Java-继承与多态-上篇

关于类与对象&#xff0c;内容较多&#xff0c;我们分为两篇进行讲解&#xff1a; &#x1f4da; Java-继承与多态-上篇&#xff1a;———— <就是本篇> &#x1f4d5; 继承的概念与使用 &#x1f4d5; 父类成员访问 &#x1f4d5; super关键字 &#x1f4d5; supe…...

通过比较list与vector在简单模拟实现时的不同进一步理解STL的底层

cplusplus.com/reference/list/list/?kwlist 当我们大致阅读完list的cplusplus网站的文档时&#xff0c;我们会发现它提供的接口大致上与我们的vector相同。当然的&#xff0c;在常用接口的简单实现上它们也大体相同&#xff0c;但是它们的构造函数与迭代器的实现却大有不同。…...

软件I2C的代码

I2C的函数 GPIO的配置——scl和sda都配置为开漏输出 void MyI2C_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruture;GPIO_InitStruture.GPIO_Mode GPIO_Mode_Out_OD;GPIO_InitStruture.GPIO_PinGPIO_Pin_10 | GPIO_Pin_…...

登录时用户名密码加密传输(包含前后端代码)

页面输入用户名密码登录过程中&#xff0c;如果没有对用户名密码进行加密处理&#xff0c;可能会导致传输过程中数据被窃取&#xff0c;就算使用https协议&#xff0c;在浏览器控制台的Request Payload中也是能直接看到传输的明文&#xff0c;安全感是否还是不足。 大致流程&a…...

ai聊天对话页面-uniapp

流式传输打字机效果&#xff0c;只支持uniapp内使用 &#xff0c;下载地址 https://download.csdn.net/download/qq_54123885/89899859...

虚拟滚动列表如何实现?

highlight: a11y-dark 虚拟滚动列表&#xff0c;虚拟滚动的关键在于只渲染当前视口内可见的数据项&#xff0c;而不是一次性渲染所有数据项。这可以显著提高性能&#xff0c;尤其是在处理大量数据时。 以下是一个完整的虚拟滚动列表的示例代码&#xff1a; <!DOCTYPE htm…...

07_Linux网络配置与管理:命令与工具指南

本系列文章导航&#xff1a;01_Linux基础操作CentOS7学习笔记-CSDN博客 文章目录 网络配置与管理&#xff1a;命令与工具指南1. ping命令2. ifconfig命令3. ip命令4. route命令5. ip route命令6. nslookup命令7. nmcli命令8. nmtui命令9. RHEL7修改网卡名1. 修改网络(会话)配置…...

首个统一生成和判别任务的条件生成模型框架BiGR:专注于增强生成和表示能力,可执行视觉生成、辨别、编辑等任务

BiGR是一种新型的图像生成模型&#xff0c;它可以生成高质量的图像&#xff0c;同时还能有效地提取图像特征。该方法是通过将图像转换为一系列的二进制代码来工作&#xff0c;这些代码就像是图像的“压缩版”。在训练时会遮住一些代码&#xff0c;然后让模型学习如何根据剩下的…...

【Java知识】Java进阶-服务发现机制SPI

文章目录 SPI概述SPI 工作原理 ServiceLoader代码展示简化的 ServiceLoader 类关键点解释使用示例1. 定义服务接口2. 实现服务提供者3. 配置文件4. 加载服务提供者 总结 SPI使用场景1. 数据库驱动2. 日志框架3. 图像处理4. 加密算法5. 插件系统6. 缓存机制示例代码1. 定义服务接…...

多模态技术的协同表现:从文本生成、语音合成到口型同步综合测评

本文是针对多模态对话系统核心技术栈的使用效果和网络测评整理。 测评内容基于用户体验&#xff0c;侧重于从使用者角度出发&#xff0c;讨论实际操作中的体验感受&#xff0c;如技术的易用性、输出效果如文本的连贯性、语音的自然度、口型同步的准确性等。不涉及具体算法架构…...

Java最全面试题->Java主流框架->Srping面试题

Spring面试题 下边是我自己整理的面试题,基本已经很全面了,想要的可以私信我,我会不定期去更新思维导图 哪里不会点哪里 谈谈你对 Spring 的理解? Spring 是一个开源框架,为简化企业级应用开发而生。Spring 可以是使简单的 JavaBean 实现以前只有 EJB 才能实现的功能。…...

参编国家标准需要注意的事项有哪些?

1. 项目相关性&#xff1a; • 选择与自身企业产品、业务或专业领域紧密相关的国家标准进行参编。这样不仅能确保企业在标准制定过程中发挥自身的优势和专长&#xff0c;使参编工作更有实际意义和价值&#xff0c;也有利于企业将标准更好地应用于自身的生产经营活动&#xff0c…...

【Dash】feffery_antd_components 按钮组件的应用

一、feffery_antd_componenet 中的 AntdFloatButton 和 AntdFloatButtonGroup AntdFloatButton 和 AntdFloatButtonGroup 是两个用于创建悬浮按钮和悬浮按钮组的组件。 AntdFloatButton 是单个悬浮按钮组件&#xff0c;它提供了多种属性来定义按钮的外观及行为。AntdFloatBut…...

01 springboot-整合日志(logback-config.xml)

logback-config.xml 是一个用于配置 Logback 日志框架的 XML 文件&#xff0c;通常位于项目的 classpath 下的根目录或者 src/main/resources 目录下。 Logback 提供了丰富的配置选项&#xff0c;可以满足各种不同的日志需求。需要根据具体情况进行配置。 项目创建&#xff0…...

Java最全面试题->计算机基础面试题->计算机网络面试题

计算机网络 下边是我自己整理的面试题&#xff0c;基本已经很全面了&#xff0c;想要的可以私信我&#xff0c;我会不定期去更新思维导图 哪里不会点哪里 1.说一下TCP/IP四层模型 TCP/IP协议是美国国防部高级计划研究局为实现ARPANET互联网而开发的。 网络接口层&#xff…...

VSCode编译器改为中文

1. 通过快捷键设置中文 打开命令面板&#xff1a;按住键盘上的CtrlShiftP组合键&#xff0c;打开命令面板。 输入并设置语言&#xff1a;在命令面板中输入Configure Display Language。 点击Configure Display Language选项。 在弹出的语言选择列表中&#xff0c;选择zh-cn…...

前端开发设计模式——状态模式

目录 一、状态模式的定义和特点 二、状态模式的结构与原理 1.结构&#xff1a; 2.原理&#xff1a; 三、状态模式的实现方式 四、状态模式的使用场景 1.按钮的不同状态&#xff1a; 2.页面加载状态&#xff1a; 3.用户登录状态&#xff1a; 五、状态模式的优点 1.提…...

特种作业操作烟花爆竹试题分享

1.&#xff08;单选题&#xff09;职业卫生研究的是人类从事各种职业劳动过程中的&#xff08; &#xff09;。 A.健康问题 B.环境问题 C.卫生问题 答案:C 2.&#xff08;单选题&#xff09;安全生产事关人民群众的&#xff08; &#xff09;安全&#xff0c;事关改革发展和…...

实现prometheus+grafana的监控部署

直接贴部署用的文件信息了 kubectl label node xxx monitoringtrue 创建命名空间 kubectl create ns monitoring 部署operator kubectl apply -f operator-rbac.yml kubectl apply -f operator-dp.yml kubectl apply -f operator-crd.yml # 定义node-export kubectl app…...

确保Spring Boot定时任务只执行一次方案

在Spring Boot项目中&#xff0c;确保定时任务只执行一次是一个常见的需求。这种需求可以通过多种方式来实现&#xff0c;以下是一些常见的方法&#xff0c;它们各具特点&#xff0c;可以根据项目的实际需求来选择最合适的方法。 1. 使用Scheduled注解并设置极大延迟 一种简单…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...

运动控制--BLDC电机

一、电机的分类 按照供电电源 1.直流电机 1.1 有刷直流电机(BDC) 通过电刷与换向器实现电流方向切换&#xff0c;典型应用于电动工具、玩具等 1.2 无刷直流电机&#xff08;BLDC&#xff09; 电子换向替代机械电刷&#xff0c;具有高可靠性&#xff0c;常用于无人机、高端家电…...