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

Java的三大特性之一——继承

前言

http://t.csdnimg.cn/uibg3

在上一篇中我们已经讲解过封装,这里就主要讲解继承与多态


继承

1.为什么需要继承

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

面向对象思想中提出了继承的概念,专门用来进行共性抽取,实现代码复用

2.什么是继承

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

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

继承主要解决的问题是:共性的抽取,实现代码复用
比如猫和狗都是动物,那么我们就可以进行共性的抽取实现继承

在这,Dog和Cat都继承了Animal类,其中:Animal类称为父类/基类或超类,Dog和Cat可以称为Animal的子类/派生类,继承之后,子类可以复用父类中成员,子类在实现时只需关心自己新增加的成员即可,在这之后还可以实现多态

3.如何使用继承

1.基本应用

我们先对父类进行设计

class Animals {public String name;public int age;public String color;public Animals(String name, int age, String color) {this.name = name;this.age = age;this.color = color;}public void eat() {System.out.println(this.name + "正在吃饭!");}
}

之后对子类使用extends关键字进行继承

class Dog extends Animals {public Dog() {super("xiaohei", 10, "黄色");}public void bark() {System.out.println(this.name + "正在汪汪汪!");}
}class Cat extends Animals {public Cat(){super("xiaohuang",20,"黑白");}public void mew() {System.out.println(this.name + "正在喵喵喵!");}
}

在这里我们的子类应当与父类有所不同,不然就没必要使用继承

2.子类对父类成员变量的访问

class Base {public int a = 1;public int b = 2;
}class Derived extends Base {public int a = 100;public int c = 3;public void test() {System.out.println(super.a);//调用父类的System.out.println(this.a);//调用子类的System.out.println(super.b);//调用父类System.out.println(this.b);//子类没有则调用父类的System.out.println(this.c);//子类的}
}public class Test2 {public static void main(String[] args) {Derived derived = new Derived();derived.test();}
}
如果访问的成员变量子类中有,优先访问自己的成员变量。
如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。
如果访问的成员变量与父类中成员变量 同名,则 优先访问自己的。

3.子类对父类成员方法的访问

class Base2 {public void testA() {System.out.println("testA()");}
}class Derived2 extends Base2 {public void testA() {System.out.println("Derived2::testA()");}public void testB() {System.out.println("testB()");}public  void testC() {this.testA();//子类super.testA();//父类this.testB();//子类}
}
public class Test2 {public static void main(String[] args) {Derived2 derived2 = new Derived2();derived2.testC();}
}

通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到则访问,否则编译报错。

通过派生类对象访问父类与子类同名方法时,如果父类和子类同名方法的参数列表不同(重载),根据调用方法适w传递的参数选择合适的方法访问,如果没有则报错

 4.super与this关键字

对于上述2.3子类对父类的访问,归根结底是super与this之间的区别

需要注意的是

1.只能在类的非静态方法中使用,用来访问非静态方法和字段

2.在构造方法中调用时,必须是构造方法的第一条语句,并且不能同时使用 

this是对当前对象的访问,而super是子类对象中从父类继承下来部分成员的引用

5.子类构造方法

class Base {public Base() {System.out.println("Base()");}
}
class Derived extends Base {public Derived() {// super();   // 注意子类构造方法中默认会调用基类的无参构造方法:super(),// 用户没有写时,编译器会自动添加,而且super()必须是子类构造方法中第一条语句,System.out.println("Derived()");}
}
public class Test2 {public static void main(String[] args) {Derived d = new Derived();}
}

4.结尾

Java中不支持多继承

一般我们不希望出现超过三层的继承关系. 如果继承层 次太多, 就需要考虑对代码进行重构了

若该类被final关键字修饰则不能被继承

值得一提的是区别于组合

继承表示对象之间是is-a的关系,比如:狗是动物,猫是动物

组合表示对象之间是has-a的关系,比如:汽车

这里贴一个详解继承与组合的文章 https://www.hollischuang.com/archives/1319


如果上述内容对您有帮助,希望给个三连谢谢 

相关文章:

Java的三大特性之一——继承

前言 http://t.csdnimg.cn/uibg3 在上一篇中我们已经讲解过封装,这里就主要讲解继承与多态 继承 1.为什么需要继承 Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是现实…...

Java复习05 Spring 概念

Java复习05 Spring 概念 初学 Spring 的时候 我的问题是 什么是Spring? Spring的底层实现是什么?为什么现在Java都在用sping框架? 1.把Spring类比成乐高说明书 想象一下你有一个超级大的乐高积木盒子,里面有各种各样的积木。你…...

初级爬虫实战——哥伦比亚大学新闻

文章目录 发现宝藏一、 目标二、简单分析网页1. 寻找所有新闻2. 分析模块、版面和文章 三、爬取新闻1. 爬取模块2. 爬取版面3. 爬取文章 四、完整代码五、效果展示 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不…...

【JS】深度学习JavaScript

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【JS】深度学习JavaScript 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一:JavaScript1.1 JavaScript是什么1.2 JS的引入方式1.3 JS变量1.4 数据类型1.5 …...

云原生相关知识

一、kubernetes 1 概述 Kubernetes(也称 k8s 或 “kube”)是一 个​​开源​​的容器编排平台,可以自动完成在部署、管理和扩展容器化应用过程中涉及的许多手动操作。 我们常说的编排的英文单词为 “Orchestration”,它常被解释…...

【多线程】有了解过 CAS 和原子操作吗?

SueWakeup 个人主页:SueWakeup 系列专栏:学习Java 个性签名:人生乏味啊,我欲令之光怪陆离 本文封面由 凯楠📷 友情赞助! 目录 前言 悲观锁和乐观锁 什么是 CAS ? 什么是原子操作? CAS 执行流…...

Linux 服务升级:Nginx 热升级 与 平滑回退

目录 一、实验 1.环境 2.Kali Linux 使用nmap扫描CentOS 3.Kali Linux 远程CentOS 4.Kali Linux 使用openvas 扫描 CentOS 5.Nginx 热升级 6.Nginx 平滑回退 二、问题 1.kill命令的信号有哪些 2.平滑升级与回退的信号 一、实验 1.环境 (1)主机…...

能降低嵌入式系统功耗的三个技术

为电池寿命设计嵌入式系统已经成为许多团队重要的设计考虑因素。优化电池寿命的能力有助于降低现场维护成本,并确保客户不需要不断更换或充电电池,从而获得良好的产品体验。 团队通常使用一些标准技术来提高电池寿命,例如将处理器置于低功耗…...

暴力快速入门强化学习

强化学习算法的基本思想(直觉) 众所周知,强化学习是能让智能体实现某个具体任务的强大算法。 强化学习的基本思想是让智能体跟环境交互,通过环境的反馈让智能体调整自己的策略,从反馈中学习,不断学习来得到…...

vue中v-if和v-show的区别

手段:v-if是动态的向DOM树内添加或者删除DOM元素;v-show是通过设置DOM元素的display样式属性控制显隐;编译过程:v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-s…...

MATLAB绘图

现学现用,用时再学。 plot函数:有两个向量被指定为参数,plot(x,y) 会生成 y 对 x 的图形 添加轴标签和标题: 通过调用一次 plot,多个 x-y 对组参数会创建多幅图形: 在每十个数据点处放置标记: 一个窗口绘制多个图形; 可在弹窗的插入选项上添加…...

嵌入式学习-ARM-Day4

嵌入式学习-ARM-Day4 实现三个LED灯亮灭 .text .global _start _start: 使能GPIOE的外设时钟 RCC_MP_AHB4ENSETR的第[4]设置为1即可使能GPIOE时钟 LED1 LDR R0,0X50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来,保存到R1中 ORR R1,R1,#(0x…...

MySQL 中的事务和存储引擎

目录 事务的 ACID 特性 MySQL 的四种隔离机制和问题 MySQL 的四种隔离机制: MySQL 的存储引擎 InnoDB 存储引擎 MyISAM 存储引擎 Memory 存储引擎 通过 ALTER TABLE 语句更改存储引擎 在创建表时指定存储引擎 通过修改配置文件设置默认存储引擎 在数据库系…...

echarts多个折线图共用一个x轴和tooltip组件

实现效果 根据接口传来的数据&#xff0c;使用echarts绘制出&#xff0c;共用一个x轴的图表 功能&#xff1a;后端将所有数据传送过来&#xff0c;前端通过监听选中值来展示对应的图表数据 数据格式&#xff1a; 代码&#xff1a; <template><div><div clas…...

wireshark数据捕获实验简述

Wireshark是一款开源的网络协议分析工具&#xff0c;它可以用于捕获和分析网络数据包。是一款很受欢迎的“网络显微镜”。 实验拓扑图&#xff1a; 实验基础配置&#xff1a; 服务器&#xff1a; ip:172.16.1.88 mask:255.255.255.0 r1: sys sysname r1 undo info enable in…...

如何利用RunnerGo简化性能测试流程

在软件开发过程中&#xff0c;测试是一个重要的环节&#xff0c;需要投入大量时间和精力来确保应用程序或网站的质量和稳定性。但是&#xff0c;随着应用程序变得更加复杂和庞大&#xff0c;传统的测试工具在面对比较繁琐的项目时非常费时费力。这时&#xff0c;一些自动化测试…...

继承和深拷贝封装

继承和深拷贝封装 今日目标&#xff1a; 1.es5寄生组合式继承 2.es6类的继承 3.深拷贝函数封装 00-回顾 # 不同数据类型赋值时的区别&#xff1a; 基本数据类型&#xff0c;赋的就是值&#xff0c;相互之间不再有任何影响 引用数据类型&#xff0c;赋的是地址&#xff0c…...

《定时执行专家》:Nircmd 的超级搭档,解锁自动化新境界

目录 Nircmd 简介 《定时执行专家》与 Nircmd 的结合 示例&#xff1a; 自动清理电脑垃圾: 定时发送邮件: 定时关闭电脑: 《定时执行专家》的优势: 总结: 以下是一些其他使用示例&#xff1a; 立即下载《定时执行专家》&#xff1a; Nircmd 官方网站&#xff1a; 更…...

Android 封装的工具类

文章目录 日志封装类-MyLog线程封装类-LocalThreadPools自定义进度条-LoadProgressbar解压缩类-ZipUtils本地数据库类-MySQLiteHelper访问webservice封装-HttpUtilsToolbar封装类-MaterialToolbar网络请求框架-OkGo网络请求框架-OkHttp 日志封装类-MyLog 是对android log的封装…...

linux下线程分离属性

linux下线程分离属性 一、线程的属性---分离属性二、线程属性设置2.1 线程创建前设置分离属性2.2 线程创建后设置分离属性 一、线程的属性—分离属性 什么是分离属性&#xff1f; 首先分离属性是线程的一个属性&#xff0c;有了分离属性的线程&#xff0c;不需要别的线程去接合…...

Nano-Banana快速上手指南:5分钟完成首个产品平铺图生成

Nano-Banana快速上手指南&#xff1a;5分钟完成首个产品平铺图生成 1. 项目简介 Nano-Banana是一款专门为产品拆解和平铺展示设计的智能图像生成工具。它能帮你快速创建专业级的产品爆炸图、部件拆解图和平铺展示图&#xff0c;无需任何设计基础&#xff0c;5分钟就能生成你的…...

BetterGI:重新定义《原神》游戏体验的开源智能辅助系统

BetterGI&#xff1a;重新定义《原神》游戏体验的开源智能辅助系统 【免费下载链接】better-genshin-impact &#x1f4e6;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音游 - …...

算法工具箱之双指针

双指针是算法中一种常用的技巧&#xff0c;特别适用于​​数组​​和​​链表​​类问题。它的核心思想是使用两个指针以不同的策略遍历数据结构&#xff0c;从而高效地解决问题。双指针常见的三种类型&#xff1a;&#xff08;1&#xff09;快慢指针&#xff1a;两个指针从同一…...

Intv_AI_MK11与Claude协同实战:构建多模型AI应用开发平台

Intv_AI_MK11与Claude协同实战&#xff1a;构建多模型AI应用开发平台 1. 混合AI模型的应用价值 在AI应用开发领域&#xff0c;单一模型往往难以满足复杂业务需求。就像一支足球队需要不同位置的球员配合一样&#xff0c;将Intv_AI_MK11与Claude等模型协同部署&#xff0c;能够…...

LFM2.5-1.2B-Thinking-GGUF效果展示:32K上下文下跨段落信息关联与归纳能力实测

LFM2.5-1.2B-Thinking-GGUF效果展示&#xff1a;32K上下文下跨段落信息关联与归纳能力实测 1. 模型核心能力展示 1.1 32K上下文处理实测 LFM2.5-1.2B-Thinking-GGUF最突出的能力是其32K超长上下文处理能力。在实际测试中&#xff0c;我们输入了一篇约2万字的技术文档&#x…...

OpenClaw新手避坑指南:Qwen3-14B镜像部署的5个常见失误

OpenClaw新手避坑指南&#xff1a;Qwen3-14B镜像部署的5个常见失误 1. 为什么需要这份避坑指南 第一次在本地部署OpenClaw对接Qwen3-14B镜像时&#xff0c;我踩遍了所有能想到的坑。从CUDA版本冲突到显存溢出&#xff0c;从端口占用到凭证失效&#xff0c;整个过程就像在玩&q…...

Java JDK1.9快速下载与安装指南

1. Java JDK1.9简介与下载准备 Java Development Kit&#xff08;JDK&#xff09;是Java开发的核心工具包&#xff0c;而JDK1.9作为早期版本&#xff0c;虽然现在已经不是主流选择&#xff0c;但在某些特定场景下仍然有开发者需要使用。如果你正在寻找JDK1.9的下载和安装方法&a…...

SmartX 榫卯企业云平台 + 亚信安全 DeepSecurity 企业云安全防护联合解决方案

近日&#xff0c;北京志凌海纳科技股份有限公司&#xff08;以下简称“SmartX”&#xff09;与亚信安全科技股份有限公司&#xff08;以下简称“亚信安全”&#xff09;携手推出企业云安全防护联合解决方案。该方案将 SmartX 榫卯企业云平台与亚信安全的专业云主机安全产品 Dee…...

好写作AI:毕业论文的“智能魔法棒”,解锁学术新境界

在学术的征途中&#xff0c;毕业论文如同一座巍峨的山峰&#xff0c;让无数攀登者既期待又畏惧。它不仅是对多年学习成果的检验&#xff0c;更是个人智慧与创造力的集中展现。但面对复杂的结构、严谨的逻辑、浩瀚的文献&#xff0c;以及那令人头疼的格式要求&#xff0c;你是否…...

别再纠结选哪个了!手把手教你根据项目需求选对Go框架:Gin、Kratos还是Zero?

实战指南&#xff1a;如何为你的Go项目精准匹配框架——Gin、Kratos与Zero深度解析 当启动一个新项目时&#xff0c;选择正确的框架往往决定了后续开发的顺畅程度。面对Gin、Kratos和Zero这三个主流Go框架&#xff0c;很多开发者会陷入选择困难。本文将带你从实际项目需求出发&…...