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

关于继承是怎么样的?那当然是很好理解之

本文描述了关于继承的大部分知识,但是并不全,每篇博客之间的知识都有互串,所以需要把几篇文章合起来看,学会融会贯通!

温馨提示:使用PC端观看,效果更佳! 

目录

1.继承是什么

2.什么时候用到继承

3.如何实现继承

4.关于对象的访问

​编辑

5.使用super关键字访问父类

6.父类构造方法

7.介绍protected

8.final关键字


1.继承是什么

(1)在现实生活中,我们都听说过子承父业这个词,这种也叫继承。

(2)某某小孩很顽皮,这肯定是继承了他爸的基因

那么在计算机中,继承是怎么样的呢?

(1)一个类继承了另一个类,这称为继承;前者成为子类,而后者就是父类

(2)继承机制是面向对象程序设计使代码可以复用的最重要的手段,允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生的类,称为派生类。

2.什么时候用到继承

(1)当几个类中有较多重复的代码时;当两个类的属性很相近时。

(2)例如:

这个时候我们可以用到继承

3.如何实现继承

(1)语法

继承使用到关键字:extends

class 类名 extends 类名 {}

(2)示例

class Animal {public String name;public int age;public void eat() {System.out.println("正在吃");}
}
class dog extends Animal {public String color;public void doing() {System.out.println("正在旺旺叫");}
}
class Cat extends Animal{public void doing() {System.out.println("正在喵喵喵");}
}

(3)作用

这样就完成了对共性的抽取,实现了代码的复用

4.关于对象的访问

 下面做一些测试,观察默认情况下是如果访问的

(1)子类和父类中不存在相同的变量名字

(2)子类和父类中存在相同变量名字

结果:

直接访问,访问到的是子类中的变量

(3)访问成员方法

结果:

同样,如果子类和父类中存在相同的名字,优先访问子类

(4)访问父类私有成员

我们都知道,当被private修饰之和,直接访问权限就被限制在了同一个类中;那如果是继承它的子类呢?

1)直接访问

2)间接访问

(5)总结

 1)通过子类对象的引用,去访问子类和父类中不存在相同名字的变量和方法时,优先在子类中寻找,若子类中不存在该变量或者方法时,才会到父类中寻找,若都不存在,则编译报错。

2)通过子类对象的引用,去访问子类和父类中存在相同名字的变量或方法(不构成重载),同样优先访问子类,子类中不存在才去访问父类,都没有则编译报错。

3)那如果子类和父类中存在相同的名字和方法,该如何访问到父类中的呢?下面介绍一个关键字:super

5.使用super关键字访问父类

这个super关键字和this有三个类似的功能,而super出现的意义就是:在子类的方法中访问父类

(1)super访问父类成员变量

这种一定是要求在子类这个类中,而且是在子类中一个方法内

访问:

结果:前面两个为子类,后面一个为父类

(2)访问父类成员方法

三种访问方式:

结果:

(3)super和this的大致访问

(4)super访问父类构造方法

下面先介绍父类构造方法

6.父类构造方法

在构造方法这里,和前面类的构造方法很类似。不写构造方法时,编译器默认提供,写了不带参数没有实现的构造方法也默认没有提供,但是如果写了带参数的构造方法,编译器则不会再提供

(1)不提供构造方法

第一种情况:正常

第二种情况:正常

第三种情况:

(2)主动提供构造方法

第一种情况:只给子类提供

第二种情况:只给父类提供(报错)

原因解释:当父类提供了构造方法之后,子类就不会再提高任何的构造方法;因为父类需要初始化,但是子类中没有构造方法,无法调用父类的构造方法,所以会报错

做法:在子类中也提供构造方法,并在里面使用super关键字调用父类构造方法

第三种情况:子类父类都提供

根据上面的情况,我们可以做出一些总结

(3)关于构造方法的总结

1)父子类,每次构造子类对象前,都会先完成对父类的构造。也就是说,总是会先调用父类的构造方法,再调用子类的构造方法

2)程序员不提供任何构造方法,编译器都会默认提供

3)当父类手动提供了构造方法,而子类却没有,则会报错,因为子类无构造方法则无法调用

4)针对上面第三点的解释:为什么子类和父类都不提供构造方法时,可以调用到父类构造?

即使是默认的构造方法,在子类构造中,也都会默认有一个super()语句,无论写没写。

当父类手动提供了带参构造方法之后,子类中也就不会再提供任何的构造方法;同理,子类中手动提供了带参构造方法,父类中也不会再提供但是,前者会报错,因为构造子类前,一定会先去构造父类(但是没有super(),无法调用父类构造);而后者,父类不存在带参构造方法,不需要强制初始化。(存在带参构造方法时,在实例化一定要对其赋值,否则就是报错,上面的终究原因)

(4)使用super()调用父类构造方法

1)默认提供(不细说了)

2)手动提供

class Big {public int a;public Big(int a) {this.a = a;}
}
class Min extends Big {public int b;public Min(int a, int b) {super(a);this.b = b;}
}
public class Test3 {public static void main(String[] args) {Min min = new Min(10,20);}
}

(5)关于super的细节和注意事项

1)super()必须在子类构造方法中的第一行,否则报错

并且,super()只能出现一次,也不能和this()同时出现(他们都必须在第一行)

2)只能存在于非静态的方法中,依赖对象;用来访问非静态成员方法和字段

7.介绍protected

这是一个关键字,一般是用于修饰成员变量和成员方法

根据上表可知,只要在同一个包中,不同类之间是可以互相使用的;它还多了一条性质,就是只要是父子类关系,在不同的类中也可以互相调用。

下面是不同包中的两个类 

(1)不能访问的状态

1)public修饰

2)被protected修饰后

意思就是:在不同包中,不能直接访问被protected修饰的成员变量

(2)允许访问状态

想要访问被protected修饰的成员变量,就要按照下面的步骤来进行

1)使用继承关系

2)使用super关键字访问父类

错误原因就是super不能在静态方法中使用

3)正确访问

访问并且赋值:

8.final关键字

final关键字在java中有三个功能。

(1)修饰变量(2)修饰类(3)修饰方法

(1)修饰变量

1)未修饰时:

public static void main(String[] args) {int a = 520;System.out.println(a);a = 250;System.out.println(a);}

未被修饰时,变量的值是可以被改变的;也就是说,没有被final修饰的520就是250

2)加上修饰

语法:

final 类型 变量名字 = 值;

被fianl修饰的变量,可以理解成变成了一个常量,此时是无法被修改的。

(2)final修饰类

作用:被final修饰的类,不能再被继承,称为密封类

1)修饰前:

2)修饰后:

(3)修饰方法

作用:当这个方法被修饰后,表明这个方法不能再被重写

1)未被修饰

2)被修饰后

相关文章:

关于继承是怎么样的?那当然是很好理解之

本文描述了关于继承的大部分知识,但是并不全,每篇博客之间的知识都有互串,所以需要把几篇文章合起来看,学会融会贯通! 温馨提示:使用PC端观看,效果更佳! 目录 1.继承是什么 2.什…...

高可用系统有哪些设计原则

1.降级 主动降级:开关推送 被动降级:超时降级 异常降级 失败率 熔断保护 多级降级2.限流 nginx的limit模块 gateway redisLua 业务层限流 本地限流 gua 分布式限流 sentinel 3.弹性计算 弹性伸缩—K8Sdocker 主链路压力过大的时候可以将非主链路的机器给…...

LeetCode-回文数

LeetCode-回文数 解体思路: ①第一种:转换成字符串,使用字符串的现有api方法进行反转 ②第二种:直接使用循环除余乘10方法,进行反转 涉及知识点: 循环判断,StringBuffer,int类型…...

50. 【Linux教程】源码安装软件

本小节介绍如何使用软件的源码包安装软件,以安装 nginx 源码包为例。 1.下载软件源码包 使用如下命令下载 nginx 源码包: wget http://nginx.org/download/nginx-1.18.0.tar.gz执行结果如下图所示: 2.解压源码包 下载好了压缩包之后&#…...

《操作系统实践-基于Linux应用与内核编程》第10章--实验 Qt聊天程序

前言: 内容参考《操作系统实践-基于Linux应用与内核编程》一书的示例代码和教材内容,所做的读书笔记。本文记录再这里按照书中示例做一遍代码编程实践加深对操作系统的理解。 引用: 《操作系统实践-基于Linux应用与内核编程》 作者:房胜、李旭健、黄…...

探究Kafka主题删除失败的根本原因

欢迎来到我的博客,代码的世界里,每一行都是一个故事 探究Kafka主题删除失败的根本原因 前言主题删除的基础主题删除的定义和作用:删除操作的基本流程: 可能存在删除异常的因素数据积压的处理方法Broker状态异常处理方法通用方法 前…...

JavaSE(上)-Day7

JavaSE(上)-Day7 类和对象封装privatethis构造方法标准JavaBean对象的内存图执行Test类main方法生成一个User对象的内存过程 基本数据类型和引用数据类型的区别this的内存原理成员变量和局部变量区别 类和对象 类是设计图纸,对象是真正的实例…...

记录一下在Pycharm中虚拟环境的创建

如果在Pycharm中要新建一个虚拟环境,那你可以在Terminal中选择Command Prompt,在这里面执行相关命令 一、安装了Anaconda,创建虚拟环境 当你使用解释器是Anaconda提供的时,你可以使用conda命令执行,见以下操作&#x…...

Python从入门到精通秘籍九

一、Python中文件编码概念 在Python中,文件编码指的是将文本内容转换为字节序列的过程。不同的编码方式使用不同的字符集和字节表示形式。下面是一个示例代码: # 写入文本到文件 text "你好,世界!" with open("…...

善于利用window挂在全局变量

开发过程成中遇到一个奇怪的问题,打开一个echats图表之后,关闭echarts图再进入其他页面页面会报错提示 $(...).draggble not a function经过一步步定位,发现echats图是通过后端获取js、css文件然后在本地绘制而成。而获…...

《C缺陷和陷阱》-笔记(5)

目录 一、整数溢出 溢出 如何防止溢出 二、为函数main提供返回值 连接 一、什么是连接器 连接器工作原理 三、声明与定义 四、命名冲突与static 修饰符 statia 一、整数溢出 溢出 C语言中存在两类整数算术运算,有符号运算与无符号运算。 在无…...

【数字图像处理matlab系列】保存图像

【数字图像处理系列】保存图像imwrite函数 使用函数imwrite可以将图像保存到本地上,该函数的语法为 imwrite(image_data, filename)其中,image_data是要写入的图像数据,可以是一个矩阵或一个三维数组(对于彩色图像),filename是要写入的文件名,可以包含路径信息。例如,…...

八股文三(Spring、Spring Cloud Alibaba)

Spring篇 什么是Spring Spring是个轻量级的框架,他有两大内核分别是IOC、AOPIOC是什么 * 依赖注入和控制反转,它是一种思想,创建对象不是直接new出来,而是交给IOC容器,由容器去创建进行管理,这就是控制反…...

一文带你详解天池工业数据集

人工智能是国家战略性新兴产业,制造业是国民经济的主体,随着人口红利的消失,加强设备自动化改造,提高生产自动化程度,减小劳动强度,改善作业环境,已经成为制造业的普遍共识。天池大赛开放出一批…...

08 龙芯平台openstack部署搭建-neutron-controller部署

一、创建neutron相关数据库、服务凭证和API端点 1.创建neutron数据库,授予合适的访问权限 mysql -uroot -ploongson -e “CREATE DATABASE neutron;” mysql -uroot -ploongson -e “GRANT ALL PRIVILEGES ON neutron.* TO ‘neutron’‘localhost’ IDENTIFIED B…...

JAVA 100道题(6)

6.创建一个表示矩形的类,包括宽度和高度属性,以及计算面积和周长的方法。 下面是一个简单的Python类,表示矩形,包含宽度和高度属性,以及计算面积和周长的方法: python复制代码 class Rectangle: def __ini…...

Leetcode面试经典150题

数组字符串 合并两个有序数组 思路 类似于归并排序,对两个有序数组进行合并即可,但是空间复杂度是O(nm); 代码 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int[] ans new int[n m];int i 0, j 0;int cnt 0;…...

王者荣耀使用的UDP通信,十几年编程没用过的协议

缘起 最近在查阅moba相关的资料时,看到了一篇王者荣耀的研发同学的技术分享,从文章中了解到王者荣耀的通信方式是UDP通信,回想到整个职业生涯,貌似并没有用过,今天特地整理下。 udp技术细节 udp协议 UDP协议叫做用…...

HiveQL详解

文章目录 前言一、数据定义语言(DDL)1. 数据库操作1.1 创建数据库1.2 删除数据库1.3 更改数据库1.4 使用数据库 2. 连接器操作2.1 创建连接器2.2 删除连接器2.3 修改连接器 3. 表操作3.1 创建表3.1.1 内部表与外部表3.1.1.1 内部表3.1.1.2 外部表3.1.1.3…...

Linux/Bizness

Enumeration nmap 用 nmap 扫描了常见的端口,发现对外开放了22,80,443 ┌──(kali㉿kali)-[~] └─$ nmap 10.10.11.252 Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-08 01:21 EST Nmap scan report for 10.10.11.252 Host is up (0.36s latency). Not…...

8大网盘直链获取指南:告别限速的浏览器脚本解决方案

8大网盘直链获取指南:告别限速的浏览器脚本解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

别再手动解析字符串了!用ANTLR4在IDEA里快速搞定一个四则运算计算器(附完整.g4文件)

告别手写解析器:用ANTLR4在IDEA中构建智能计算器的实战指南 每当需要处理复杂文本解析时,开发者们往往陷入手写递归下降解析器或调试晦涩正则表达式的泥潭。这种低效的开发方式不仅耗时耗力,还难以维护和扩展。想象一下,当你需要解…...

STM32新手避坑指南:用CubeMX和HAL库搞定VESC串口通信(附完整工程)

STM32CubeMX与HAL库实战:VESC串口通信全流程解析 第一次接触VESC开源电调时,我被它强大的性能和灵活的配置所吸引,但很快发现官方示例代码对新手并不友好——尤其是当你想用STM32CubeMX和HAL库开发时。本文将分享如何用现代开发工具链实现VE…...

KK-HF_Patch:如何用社区补丁彻底改造你的Koikatu游戏体验

KK-HF_Patch:如何用社区补丁彻底改造你的Koikatu游戏体验 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch 对于《Koikatu!》和《Koikat…...

最速终端音乐体验:spotify-player极速配置与性能优化指南

最速终端音乐体验:spotify-player极速配置与性能优化指南 【免费下载链接】spotify-player A Spotify player in the terminal with full feature parity 项目地址: https://gitcode.com/GitHub_Trending/sp/spotify-player spotify-player是一款极速、易用且…...

LocalVocal:打造零延迟、高隐私的本地AI字幕解决方案

LocalVocal:打造零延迟、高隐私的本地AI字幕解决方案 【免费下载链接】obs-localvocal OBS plugin for local speech recognition and captioning using AI 项目地址: https://gitcode.com/gh_mirrors/ob/obs-localvocal 在直播和内容创作领域,实…...

Phi-3.5-mini-instruct效果展示:中文诗歌创作、对联生成、节日祝福文案实录

Phi-3.5-mini-instruct效果展示:中文诗歌创作、对联生成、节日祝福文案实录 1. 模型简介与特点 Phi-3.5-mini-instruct 是一款轻量级但功能强大的中文文本生成模型,特别适合创意写作类任务。与常规问答模型不同,它在诗歌、对联、祝福文案等…...

如何用DDrawCompat让Windows 10/11完美运行经典老游戏:终极兼容性修复指南

如何用DDrawCompat让Windows 10/11完美运行经典老游戏:终极兼容性修复指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/g…...

嵌入式系统与CPS核心技术解析与应用实践

1. 嵌入式系统与信息物理系统概述1.1 基本概念与技术特征嵌入式系统是以专用计算机为核心,嵌入到对象体系中完成特定功能的智能化电子系统。与通用计算机系统不同,嵌入式系统具有三个显著特征:专用性:针对特定应用场景优化设计&am…...

解锁ReFS潜能:在Windows 8.1与10中安全配置与故障规避指南

1. 认识ReFS:为什么值得冒险启用它? 第一次听说ReFS这个文件系统时,我正被NTFS频繁的磁盘错误折腾得焦头烂额。作为Windows 8.1和10内置的新一代文件系统,ReFS(弹性文件系统)就像个自带修复功能的智能管家。…...