【JavaSE】面向对象——继承性

继承性

继承性的概念

所谓继承,就是程序猿在保持原有类特性的基础上进行扩展,增加新功能,这样的类被称为派生类或者子类,原有类被称为超类或者基类。

在对于继承性概念进行书写前,我曾查阅许多资料来保证对其表达的通俗性和准确性,但是发现貌似都是晦涩的,不像继承性和多态性一样。虽然定义是晦涩的,但是其含义还是很好理解的。

通俗的说,继承就是A类继承B类所有属性和方法,在B类的基础上进行扩展,增加一些新的功能,从而减少代码的书写。

继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。

继承解决的主要问题是:共性的抽取、实现代码复用、实现多态。

为什么需要继承性

Java中使用类来对现实世界中的实体进行描述,类经过实例化之后产生的对象,则就能用来表示现实中的实体。但是现实世界错综复杂,事物之间可能会存在一些关联,那在程序设计时就需要进行考虑。

例如现实世界中的猫和狗,他们都属于动物,自然也就会拥有年龄及体重等属性。因此在将其抽象化为类时,就要考虑把这些属性进行抽取。面向对象程序设计就提出了继承的概念,专门用来进行共性抽取,实现代码复用。

如何实现继承性

使用关键字extends来实现继承性。

public class A { // 父类、超类、基类// 属性和方法
}public class B extends B { // 子类、派生类// 属性和方法
}

继承性的好处

1. 继承的出现减少了代码的冗余,提高了代码的复用性。

2. 继承性的出现,有利于功能的扩展。

3. 继承描述事物之间的关系是“is-a”的关系,可见父类更通用,子类更具体。

4. 继承为多态的使用提供了前提。

细节说明

1. Java中声明的类,如果没有显式的声明其父类时,则默认继承于java.lang.Object类。

2. A类继承B类之后,A类拥有B类所有的属性和方法,但是由于权限修饰符的存在,可能一些属性和方法无法使用,但是它确实在内存中有,只不过是无法使用而已。

3. A类继承B类之后,除了继承B类的所有属性和方法之外,他还可以增加自己的属性和方法。

4. 对于继承性而言,它支持多层继承,但是只支持单继承。也就是说,A类可以继承B类,B类可以继承C类,C类可以继承D类,这就是多层继承;但是A类不能同时继承B类和C类,只能继承其中的一个类,这就是单继承(单继承属于Java语言的一个局限性,后续通过类实现接口的方式,来解决单继承的局限性)。

方法重写

方法重写的概念

子类对父类继承过来的方法进行覆盖、重写的操作。

通俗的说,子类在继承父类之后,子类就获取了父类中声明的所有方法,但是子类认为父类的某些方法并不适合自己进行调用,因此就会在子类中重写方法的内容。

方法重写的规则

1. 子类重写父类的方法时,两个方法的方法名与参数列表必须相同。

2. 子类在重写父类的方法时,其子类重写方法的权限修饰符必须不小于父类被重写方法的权限修饰符。并且对于父类中private权限修饰的方法,子类是不能重写的。

3. 子类在重写父类的方法时,当父类被重写方法的返回值是void或者基本数据类型时,子类重写方法必须与父类被重写方法的返回值类型相同。当父类被重写方法的返回值是引用数据类型时,其子类重写方法的返回值类型是对应引用数据类型或引用数据类型的子类。

4. 子类在重写父类方法时,子类重写方法抛出的异常类型必须是父类抛出异常类型对应类或者子类。

super关键字

super的理解

父类的,表示当前类在使用时,直接去直接父类中寻找,如果没有找到,再去直接父类的直接父类寻找,追根溯源,直到找到或者到Object类中也没找到,而不在当前类中查找需要调用的结构。如果没有super,那么就先在本类中进行寻找,如果没有找到再去继承类中找。

在【JavaSE】类和对象一文中,曾对this关键字进行过简单介绍。this表示当前对象或者当前正在创造的对象,而super表示当前对象对父类的调用或者当前正在创造的对象对父类的调用。在实例化时,本质上没有子父类一说,属性都创建在同一个内存环境中,但是便于理解和调用,使用super表示父类的属性和方法。

super和this在使用上的结构基本上相同,只是含义不同。

 super可以调用的结构

属性、构造器、方法。

在构造器中,super可以调用属性、构造器和方法。但是在普通方法中,super只能调用属性和方法,不能调用构造器。

super调用属性、方法

结构:" super. "

子类在继承父类之后,我们就可以在子类的方法或者构造器中,调用父类的属性或者方法。一般情况下,都可以省略“super.”的结构,但是如果出现了子类重写了父类的方法或者子类的属性和父类的属性名相同的情况下,还想要调用父类的方法和属性,那么就要使用“super.”的结构了。

super调用构造器

结构:" super(形参列表) "

1. 子类继承父类之后,不会继承父类的构造器,只能通过“super(形参列表)”的形式来调用父类指定的构造器。

2. ”super(形参列表)“必须声明在构造器的首行,而前面的”this(形参列表)“也必须声明在构造器的首行。因此两者在调用时,只能选其一,不能同时存在。

3. 当在构造器中,没有声明“super(形参列表)”和“this(形参列表)”时,默认会调用“super()”,也就是当两者都不存在时,默认会调用父类中空参的构造器。

4. 根据上述可知,在对象实例化时,一个构造器中要么会调用本类重载的构造器,要么会调用父类的构造器。总之一定会直接或间接的调用到父类的构造器,也正是因为调用过父类的构造器,才会把父类中声明的属性或方法加载到内存中,供子类对象使用。

5. 一个类中声明n个构造器,最多有n-1个构造器中使用了this,则剩下的一个构造器一定使用了super。

继承性,就是子类通过extends关键字来继承父类,从而得到父类中的属性和方法。通过继承性,在子类中扩展新的功能,使得代码的复用性提高,同时也体现了面向对象程序设计中的层次结构。由于继承性使得子类拥有父类所有的属性和方法,但是可能父类的某些方法并不适合子类的功能,因此就出现了方法重写这一概念。

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

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

相关文章

Some collections -- 2024.3

一、TensorFlow Android (dataset: Mnist) We used TensorFlow to define and train our machine learning model, which can recognize handwritten numbers, called a number classifier model in machine learning terminology. We transform the trained TensorFlow mod…

C++学习第五天(内存管理)

1、内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4);int…

2024.03.01作业

1. 基于UDP的TFTP文件传输 #include "test.h"#define SER_IP "192.168.1.104" #define SER_PORT 69 #define IP "192.168.191.128" #define PORT 9999enum mode {TFTP_READ 1,TFTP_WRITE 2,TFTP_DATA 3,TFTP_ACK 4,TFTP_ERR 5 };void get_…

高维中介数据:基于交替方向乘子法(ADMM)的高维度单模态中介模型的参数估计(入门+实操)

全文摘要 用于高维度单模态中介模型的参数估计,采用交替方向乘子法(ADMM)进行计算。该包提供了确切独立筛选(SIS)功能来提高中介效应的敏感性和特异性,并支持Lasso、弹性网络、路径Lasso和网络约束惩罚等不…

npm 镜像源切换与设置

项目背景 依赖安装中断或响应特别慢。 可以看到当前所用的镜像是 https://registry.npmjs.org 。 切换淘宝镜像之后总算能够安装下来 命令行模式 查看当前镜像源 # 查看当前镜像源 npm config get registry 可以看到默认情况下是官方默认全局镜像 https://registry.npmjs.o…

竞争加剧下,登顶后的瑞幸该做什么?

瑞幸咖啡仅用短短18个月时间从品牌创立到纳斯达克上市,刷新全球最快上市记录。2020年因交易造假事件被勒令退市股价暴跌80%,有人说这个创造了赴美IPO奇迹的“巨婴”将是下一个倒下的ofo。2023年瑞幸咖啡以逆势超速增长领跑咖啡赛道有力回应了市场的质疑&…

Vector中的begin和end函数是左闭右开的区间

vector::end() 函数的语法 vector::end(); 参数&#xff1a; none——它什么都不接受。 返回值&#xff1a; iterator– 它返回一个指向向量的 past-the-end 元素的迭代器。 实际上Vector中的begin和end函数是左闭右开的区间。 例&#xff1a; Input: vector<int>…

Java多线程实现发布和订阅

目录 简介 步骤 1: 定义消息类 步骤 2: 创建发布者 步骤 3: 创建订阅者 步骤 4: 实现发布-订阅模型 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡…

棋牌室计时计费管理系统的灯控器连接教程

棋牌室计时计费管理系统的灯控器连接教程 一、前言 以下教程以 佳易王棋牌室计时计费管理系统软件V18.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 如上图&#xff0c;计时计费软件在开始计时的时候&#xff0c;点击 开始计时 如果连接了…

YOLOv9独家改进|动态蛇形卷积Dynamic Snake Convolution与空间和通道重建卷积SCConv与RepNCSPELAN4融合

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 Dynamic Snake Convolution是一种针对细长微弱的局部结构特征与复杂多变的全局形态特征设计的卷积模块。 SCConv是一种即插即用的空间…

华为OD机试真题C卷-篇6

100分值题 宽度最小的子矩阵部门人力分配电脑病毒感染会议室占用时间段 宽度最小的子矩阵 给定一个n行 * m列的矩阵&#xff1b;给定一个k个整数的数组k_list&#xff1b;在n*m的矩阵中找一个宽度最小的子矩阵&#xff0c;该子矩阵包含k_list中所有的整数&#xff1b; 输入描述…

【大数据】Flink SQL 语法篇(九):Window TopN、Deduplication

《Flink SQL 语法篇》系列&#xff0c;共包含以下 10 篇文章&#xff1a; Flink SQL 语法篇&#xff08;一&#xff09;&#xff1a;CREATEFlink SQL 语法篇&#xff08;二&#xff09;&#xff1a;WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 语法篇&#xff08;三&…

COM - get VARIANT value - .vt = (VT_BSTR | VT_ARRAY)

文章目录 COM - get VARIANT value - .vt (VT_BSTR | VT_ARRAY)概述笔记END COM - get VARIANT value - .vt (VT_BSTR | VT_ARRAY) 概述 取到一个VARIANT值, .vt 0x2008, 查了一下, 0x2008 (VT_BSTR | VT_ARRAY) 查了资料, 这个vt 0x2008是BSTR的数组. 看看咋取值? 网上…

3.2 log |416. 分割等和子集,1049.最后一块石头的重量II,494.目标和

416. 分割等和子集 class Solution { public:bool canPartition(vector<int>& nums) {vector<int> dp(10001,0);int sumaccumulate(nums.begin(),nums.end(),0);if(sum%2) return false;int targetsum/2;for(int i0;i<nums.size();i){for(int jtarget;j>…

项目管理:高效推动项目成功的关键

项目管理&#xff1a;高效推动项目成功的关键 在当今竞争激烈的商业环境中&#xff0c;项目管理已成为企业实现目标和取得成功的关键因素。有效的项目管理不仅能够确保项目按时完成&#xff0c;还能在预算范围内达到预期的质量标准。本文将探讨项目管理的重要性、关键环节以及…

Maven安装并配置本地仓库

一、安装Maven 1.下载链接 Maven官网下载链接 Binary是可执行版本&#xff0c;已经编译好可以直接使用。 Source是源代码版本&#xff0c;需要自己编译成可执行软件才可使用。 tar.gz和zip两种压缩格式,其实这两个压缩文件里面包含的内容是同样的,只是压缩格式不同 tar.gz格…

Stable Video文本生成视频公测地址——Scaling Latent Video Diffusion Models to Large Datasets

近期&#xff0c;Stability AI发布了首个开放视频模型——"Stable Video"&#xff0c;该创新工具能够将文本和图像输入转化为生动的场景&#xff0c;将概念转换成动态影像&#xff0c;生成出电影级别的作品&#xff0c;旨在满足广泛的视频应用需求&#xff0c;包括媒…

STM32 DMA入门指导

什么是DMA DMA&#xff0c;全称直接存储器访问&#xff08;Direct Memory Access&#xff09;&#xff0c;是一种允许硬件子系统直接读写系统内存的技术&#xff0c;无需中央处理单元&#xff08;CPU&#xff09;的介入。下面是DMA的工作原理概述&#xff1a; 数据传输触发&am…

解决Java并发问题的常见思路

写在文章开头 近期对一些比较老的项目进行代码走查&#xff0c;碰到一些极端的并发编程恶习&#xff0c;所以笔者就基于此文演示这类问题以及面对并发编程时我们应该需要了解一些常见套路。 Hi&#xff0c;我是sharkChili&#xff0c;是个不断在硬核技术上作死的java coder&am…

基于 Amazon EKS 的 Stable Diffusion ComfyUI 部署方案

01 背景介绍 Stable Diffusion 作为当下最流行的开源 AI 图像生成模型在游戏行业有着广泛的应用实践&#xff0c;无论是 ToC 面向玩家的游戏社区场景&#xff0c;还是 ToB 面向游戏工作室的美术制作场景&#xff0c;都可以发挥很大的价值&#xff0c;如何更好地使用 Stable Dif…