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 修饰一个类时,该类不能被继承,即不能有子类:

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

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

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

相关文章

laravel 查询数据库

数据库准备 插入 三行 不同的数据 自行搭建 laravel 工程 参考 工程创建点击此处 laravel 配置 数据库信息 DB_CONNECTIONmysql #连接什么数据库 DB_HOST127.0.0.1 # 连接 哪个电脑的 ip &#xff08;决定 电脑 本机&#xff09; DB_PORT3306 # 端口 DB_DATABASEyanyu…

【记录】VSCode|自用设置项

文章目录 1 基础配置1.1 自动保存1.2 编辑区自动换行1.3 选项卡换行1.4 空格代替制表符1.5 开启滚轮缩放 2 进阶设置2.1 选项卡不自我覆盖2.2 选项卡限制宽度2.3 选项卡组限制高度2.4 字体设置2.5 字体加粗2.6 侧边栏2.7 沉浸式代码模式 Zen Mode2.8 设置 Zen 模式的选项卡组 3…

filebeat接入nginx和mysql获取日志

下载nginx &#xff08;1&#xff09; 直接下载 yum install nginx -y&#xff08;2&#xff09;查看状态启动 systemctl start nginx systemctl status nginx&#xff08;3&#xff09;配置文件检查 nginx -t&#xff08;4&#xff09;端口检查 netstat -tulpn | grep :80&am…

Flutter项目打包ios, Xcode 发布报错 Module‘flutter barcode_scanner‘not found

报错图片 背景 flutter 开发的 apple app 需要发布新版本&#xff0c;但是最后一哆嗦碰到个报错&#xff0c;这个小问题卡住了我一天&#xff0c;之间的埪就不说了&#xff0c;直接说我是怎么解决的&#xff0c;满满干货 思路 这个报错 涉及到 flutter_barcode_scanner; 所…

携手并进,智驭教育!和鲸科技与智谱 AI 签署“101 数智领航计划”战略合作协议

近日&#xff0c;上海和今信息科技有限公司&#xff08;以下简称“和鲸科技”&#xff09;与北京智谱华章科技有限公司&#xff08;以下简称“智谱 AI”&#xff09;签署“101 数智领航计划”战略合作协议。双方将携手营造智能化学科教育与科研环境&#xff0c;提供多种大模型工…

前后端联调需要改ip联调多个后端,用nginx代理

前后端联调需要改ip联调多个后端 Nginx #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; }http {include mime…

空洞卷积:Atrous/Dilated convolution - 语义分割中多用到

没办法&#xff0c;我还是很多基础的、底层的模块不通透&#xff0c;读论文难免会受到阻碍&#xff0c;而且这现在科研任务很急了&#xff0c;必须要马上动手实验&#xff0c;全给我弄明白、特别是算法&#xff01; 空洞卷积-可变形卷积-这一个个我都要。 空洞卷积据说在语义分…

MySQL企业常见架构与调优经验分享

文章目录 一、选择 PerconaServer、MariaDB 还是 MYSQL二、常用的 MYSQL 调优策略三、MYSOL 常见的应用架构分享四、MYSOL 经典应用架构 观看学习课程的笔记&#xff0c;分享于此~ 课程&#xff1a;MySQL企业常见架构与调优经验分享 mysql官方优化文档 一、选择 PerconaServer、…

机器学习与深度学习2:梯度下降算法和BP反向传播算法

梯度下降算法&#xff1a; 算法原理 上一章我们已知神经网络算法就是求解拟合函数&#xff0c;通过线性变换和非线性变换来得出损失函数最小的模型。那么是如何进行求解的呢&#xff0c;其中之一就是梯度下降算法。 如图&#xff0c;当我们需要求解拟合曲线时&#xff0c;如何…

Verilog基础:层次化标识符的使用

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 一、前言 Verilog HDL中的标识符(identifier)是一个为了引用而给一个Verilog对象起的名字&#xff0c;分为两大类&#xff1a;普通标识符大类和层次化标识符大类。…

HarmonyOS NEXT 应用开发实战(六、组件导航Navigation使用详解)

在鸿蒙应用开发中&#xff0c;Navigation 组件是实现界面间导航的重要工具。本文将介绍如何使用 Navigation 组件实现页面跳转及参数传递&#xff0c;确保你能轻松构建具有良好用户体验的应用。 当前HarmonyOS支持两套路由机制&#xff08;Navigation和Router&#xff09;&…

字典学习算法

分为固定基字典和学习型字典 学习型字典 是指通过训练大量与目标数据相似的数据&#xff0c;学习其特征获得的字典。字典学习主要包括两个阶段&#xff0c;一个是字典构建阶段&#xff0c;一个是利用字典进行样本表示阶段。 首次提出&#xff1a;最优方向法&#xff08;Method …

Euporie 是一款功能强大、使用便捷的终端 Jupyter 交互工具,让Jupyter Notebook在终端下运行

在现代数据科学领域&#xff0c;Jupyter Notebook 已成为不可或缺的工具&#xff0c;它以其强大的交互性、可读性和可移植性而闻名。然而&#xff0c;在某些场景下&#xff0c;例如远程服务器、容器环境或仅仅个人偏好&#xff0c;使用终端进行操作更便捷。 Euporie 应运而生&a…

spring day 1021

ok了家人们&#xff0c;这周学习spring框架&#xff0c;我们一起去看看吧 Spring 一.Spring概述 1.1 Spring介绍 官网&#xff1a; https://spring.io/ 广义的 Spring &#xff1a; Spring 技术栈 &#xff08;全家桶&#xff09; 广义上的 Spring 泛指以 Spring Framework…

STM32L010F4 最小系统设计

画一个 STM32L010F4 的测试板子...... by 矜辰所致前言 最近需要用到一个新的 MCU&#xff1a; STM32L010F4 &#xff0c;上次测试的 VL53L0X 需要移植到这个芯片上&#xff0c;网上一搜 STM32L010F4&#xff0c;都是介绍资料&#xff0c;没有最小系统&#xff0c;使用说明等。…

在VMware上创建虚拟机以及安装Linux操作系统,使用ssh进行远程连接VMware安装注意点 (包含 v1,v8两张网卡如果没有的解决办法)

一&#xff0c;VMware上创建虚拟机 1.VMware下载 1&#xff09;点击VMware官网进入官网 网址:VMware by Broadcom - Cloud Computing for the EnterpriseOptimize cloud infrastructure with VMware for app platforms, private cloud, edge, networking, and security.https…

NAT工作原理详解:网络地址转换的关键角色

NAT工作原理详解&#xff1a;网络地址转换的关键角色 在现代计算机网络中&#xff0c;网络地址转换&#xff08;NAT&#xff09;扮演着至关重要的角色。它不仅仅是简单地将私有IP地址转换为公共IP地址&#xff0c;而是在多个方面保证了网络的正常运行和安全性。本文将详细讲解…

从网络请求到Excel:自动化数据抓取和保存的完整指南

背景介绍 在投资和财经领域&#xff0c;论坛一直是投资者们讨论和分享信息的重要平台&#xff0c;而东方财富股吧作为中国最大的财经论坛之一&#xff0c;聚集了大量投资者实时交流股票信息。对于投资者来说&#xff0c;自动化地采集这些发帖信息&#xff0c;并进行分析&#…

Maven私服架构

目录 1.maven私服介绍 1.1 私服介绍 1.2 Nexus介绍 2. maven私服实战 2.1 nexus安装 2.2 nexus仓库类型 2.3 将项目发布到私服 2.4 从私服下载jar包 2.5 将第三方jar包发布到私服 1.maven私服介绍 1.1 私服介绍 正式开发时&#xff0c;不同的项目组开发不同的工程。m…

《深度学习》 了解YOLO基本知识

目录 一、关于YOLO 1、什么是YOLO 2、经典的检测方法 1&#xff09;one-stage单阶段检测 模型指标介绍&#xff1a; 2&#xff09;two-stage多阶段检测 二、关于mAP指标 1、概念 2、IOU 3、关于召回率和准确率 4、示例 5、计算mAP 一、关于YOLO 1、什么是YOLO YOL…