Java 继承与实现
一、继承(extends)
1.1 继承概念
继承是面向对象的基本特征,它允许子类继承父类的特征和行为,以提高代码的复用率和维护性等。下面一张图生动地展示了继承和类之间的关系:

上图中,“动物”、“食草动物”、“食肉动物”以及各种具体的动物类型,都相当于 Java 中的类,而它们之间的“父子”关系就是继承,每一种具体动物类型的实际个体就是对象,或者说是类的实例。
Java 中继承通过 extends 关键字来声明:
class Father {}class Son extends Father {}
1.2 继承模式
一般来说,面向对象编程语言应该有四种继承模式,但 Java 中只有三种继承模式:单继承、多重继承和多态。某些面向对象语言还具有多继承的继承模式,如 Python。下面一张图生动地展示了四种继承模式的区别。

上图中“不同类继承同一个类”指的就是多态。
1.3 this 关键字
this 关键字从字面意思上面看,是这个的意思,在类中就代表这个类的实例对象本身(并非类本身),这是为了方便调用对象的一些属性和方法而设定。关于 this 这个名称的由来,实际 this 是从 C++ 借鉴而来的,C++ 面向对象中的 this 关键字和 Java 中的 this 关键字有近乎相同的含义。其他的面向对象编程语言也有类似的,但并不是都作为关键字,如 Python 中,拥有类似功能的是一个约定名称为 self 的特殊参数。
我们可以通过 this 关键字来访问该类本身:
class Son {Integer age = 6;void printAge (){System.out.println(this.age); // Output: 6}
}
1.4 super 关键字
既然有 this 代表本身,就有代表其父类的关键字,那便是 super 了。super 关键字和 this 在范围定义上略有不同,this 代表实例,而 super 代表的是类,且是该类的父类,但并不是指它的某一个具体父类,而是其所有父类的一种合体。
比如说,GrandSon -> Son -> Father,那么对于 GrandSon 而言,this 就表示 GrandSon 的实例对象,而 super 代表 Son 和 Father 的一种合体。你可以认为 super 是一个同时包含 Son 和 Father 的属性及方法的特殊类。
关于 super 关键字名称的由来,实际上,父类更加标准的说法是超类,但是“父子”关系更容易说明继承的关系,所以我们一般会将超类称为父类,但实际上,super 正是超级的含义,意为一种超级的类,即子类的所有父类集合体。其他的编程语言中,也几乎都是用 super 来表示的。
我们可以通过 super 关键字来访问父类:
class Father {Integer age = 66;
}class Son extends Father {Integer age = 6;void printAge (){System.out.println(this.age); // Output: 6System.out.println(super.age); // Output: 66}
}
1.5 final 关键字
final 关键字已在其他文章详述,此处不再赘述,详情请见:Java 中的关键字 final 和 static-CSDN博客
1.6 多态
多态是同一个行为具有多个不同表现形式或形态的能力,说简单点,就是“多种形态”。当一个方法有多种不同的实现方式时,或者一个抽象类/接口,有多种不同的实现类时,即为多态。举个贴近日常生活的例子,一支笔(抽象类型),我们不指定它的具体类型,可以用来书写(抽象方法),我们不指定它的具体书写效果,则有很多东西都是属于这支笔的分类,比如不同颜色的黑笔、红笔、蓝笔等实现了不同颜色的效果,是多种形态,那么这就属于多态。前面说的属于从方法角度来讨论的,也可以从类型的角度来考虑,比如毛笔、铅笔、钢笔等,都是笔,但它们并不完全相同。
使用多态有很多好处:
- 消除类型之间的耦合关系;
- 可替换性;
- 可扩充性;
- 灵活性;
一个面向对象程序要拥有良好的结构,那么多态几乎是必不可少的。那么,Java 中的多态是怎么实现的呢?
Java 中实现多态的方式一般有三种:
- 重写:通过重写子类中的方法来实现同一方法名,不同功能的效果,实现多态;
- 接口:一个接口,多种不同的实现,即为多态;
- 抽象类和抽象方法:和接口类似,一个抽象类或者抽象方法,多个不同的子类继承后就有多种不同的实现,也能实现多态;
二、实现(implements)
实现不同于继承,继承是相对于类而言的,实现却是相对于接口而言的,实现的方式比继承多一种,即实现可以“多实现”。所有的面向对象语言都有继承的概念,但并非所有的面向对象语言都有实现的概念,因为只有部分语言拥有真正意义上的接口,如 Java 和 C#。
实现通过 inplements 关键字来声明:
interface Father1 {}interface Father2 {}class Son implements Father1, Father2 {}
接口可以被类实现,但接口本身却不可以被接口实现。也就是说,类既可以继承类,也可以实现接口,但接口只能继承接口,具体情形如下图:

上图中,多条线的地方表示可以”多继承“,但并非真正的多继承。具体可见下面的示例:
interface interface1 {}
interface interface2 {}
interface interface3 extends interface1, interface2 {} // 多“继承”class class1 {}
class class2 extends class1 {} // 继承class class3 implements interface1, interface2 {} // 多实现
相关文章:

Java 继承与实现
一、继承(extends) 1.1 继承概念 继承是面向对象的基本特征,它允许子类继承父类的特征和行为,以提高代码的复用率和维护性等。下面一张图生动地展示了继承和类之间的关系: 继承图 上图中,“动物”、“食草…...

Unity 3D基础——计算两个物体之间的距离
1.在场景中新建两个 Cube 立方体,在 Scene 视图中将两个 Cude的位置错开。 2.新建 C# 脚本 Distance.cs(写完记得保存) using System.Collections; using System.Collections.Generic; using UnityEngine;public class Distance : MonoBehav…...
css常见问题处理
文章目录 1:禁止文字被复制粘贴1.1 Css 处理1.2 Js 处理 2:元素垂直水平居中2.1:方案一2.2 方案二2.3 方案三2.4 方案四2.5 方案五 1:禁止文字被复制粘贴 1.1 Css 处理 <div class"text">我不可以复制信息</div> <…...

蓝桥杯(迷宫,C++)
输入: 思路: 1、注意输入用字符串。 2、采用广度搜素的方法来求解。 3、因为最后要求字典序最小且D<L<R<U,所以在遍历四个方向的时候, 先向下,再向左、右,最后向上。 #include<iostream> #include…...

Python爬虫selenium安装谷歌驱动解决办法
驱动下载链接:CNPM Binaries Mirror (npmmirror.com) 谷歌浏览器老版本下载:Google Chrome 64bit Windows版_chrome浏览器,chrome插件,谷歌浏览器下载,谈笑有鸿儒 (chromedownloads.net) 驱动下载后解压缩直接放入python相应文件夹: 最后&a…...
生信教程:使用拓扑加权探索基因组进化(3)
使用 Twisst 探索整个基因组的进化关系的拓扑加权教程[1]。 简介 拓扑加权是量化不一定是单系群之间关系的一种方法。它通过考虑更简单的“分类单元拓扑”并量化与每个分类单元拓扑匹配的子树的比例,提供了复杂谱系的摘要。我们用来计算权重的方法称为 Twisst&#…...

React js原生 详解 HTML 拖放 API(鼠标拖放功能)
最近碰到了个需求,大概就是要通过可视化拖拽的方式配置一个冰柜,需要把预设好的冰柜内部架子模板一个个拖到冰箱内。一开始的想法是用鼠标事件(mousedown、mouseup等)那一套去实现,能实现但是过程过于复杂,…...

LiveMedia视频中间件如何与第三方系统实现事件录像关联
一、平台简介 LiveMedia视频中间件是支持部署到本地服务器或者云服务器的纯软件服务,也提供服务器、GPU一体机全包服务,提供视频设备管理、无插件、跨平台的实时视频、历史回放、语音对讲、设备控制等基础功能,支持视频协议有海康、大华私有协…...
机器学习-有监督算法-决策树和支持向量机
目录 决策树ID3C4.5CART 支持向量积 决策树 训练:构造树,测试:从模型从上往下走一遍。建树方法:ID3,C4.5,CART ID3 以信息论为基础,以信息增益为衡量标准熵越小,混乱程度越小&…...
luffy项目之后台项目搭建、目录调整、封装日志、全局异常、Response、数据库连接
luffy后台项目创建 在虚拟环境中创建luffy项目安装django:pip install django3.1.12命令创建项目django-admin startproject luffy_api也可以pycharm创建项目,创建项目时选则已经创建好的虚拟环境即可 luffy项目目录调整 """ ├── …...

C++标准模板(STL)- 类型支持 (数值极限,min_exponent10,max_exponent,max_exponent10)
数值极限 std::numeric_limits 定义于头文件 <limits> 定义于头文件 <limits> template< class T > class numeric_limits; numeric_limits 类模板提供查询各种算术类型属性的标准化方式(例如 int 类型的最大可能值是 std::numeric_limits&l…...

linux 服务器类型Apache配置https访问
一:查看服务器类型,下载相应的SSL证书 命令:netstat -anp | grep :80 httpd是Apache超文本传输协议(HTTP)服务器的主程序,所以下载Apache证书 二:将证书解压后复制到服务器上 三个文件:xxx.key xxx_publ…...

langchain 加载各种格式文件读取方法
参考:https://python.langchain.com/docs/modules/data_connection/document_loaders/ https://github.com/thomas-yanxin/LangChain-ChatGLM-Webui/blob/master/app.py 代码 可以支持pdf、md、doc、txt等格式 from langchain.document_loaders import Unstruct…...

飞花令游戏(Python)
飞花令是古时候人们经常玩一种“行酒令”的游戏,是中国古代酒令之一,属雅令。“飞花”一词则出自唐代诗人韩翃《寒食》中 春城无处不飞花 一句。行飞花令时选用诗和词,也可用曲,但选择的句子一般不超过7个字。 在《中国诗词大会》…...

解决“413 Request Entity Too Large”错误 代表请求包太大,服务器拒绝响应
解决办法: 在nginx的配置文件nginx.conf中,添加这么一句client_max_body_size 1024m; 意思是最大请求是1024m。这个配置可以放到 http段 或者 server段 或者 location段。...

MoeCTF2023web
01http 打开题目环境 可以看到要求完成所有任务,这里用burp抓个包 按照要求修改可以得到flag moectf{basic_http_knowledge_HJbg427uFuznTqiJdtS1xhZNwpdsOnKU} 02 Web入门指北 直接找到结尾发现乱码,去解码 编码可以试试url编码和base64到16 这里用…...

C语言编写简易图书管理系统
这篇文章介绍了一个基本的图书管理系统的实现,它允许用户添加、插入、删除、修改、显示和查询图书的功能。该系统通过使用二进制文件将图书信息保存到磁盘,并且在程序启动时能够加载已保存的图书信息。 介绍 在计算机科学中,图书管理系统是…...

C++入门 第一篇(C++关键字, 命名空间,C++输入输出)
目录 1. C关键字 2. 命名空间 2.1 命名空间定义 2.2命名空间的使用 命名空间的使用有三种方式: 1.加命名空间名称及作用域限定符 2.使用using将命名空间中某个成员引入 3.使用using namespace 命名空间名称 引入 3. C输入&输出 4.缺省函数 4.1 缺省参…...
python股票波动性分析
一、简介 我们都经历过这样的情况——盯着股票图表,试图理解那些疯狂的价格上涨,或者只是想知道为什么突然平静。在这些波动中,有一个一致的因素常常脱颖而出:波动性。了解波动性为衡量任何特定点的市场情绪和情绪提供了一个视角。通过剖析波动性的细微差别,我们不仅可以更…...

53 打家劫舍
打家劫舍 题解1 DP1题解2 DP2 !经典DP! 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果 两间相邻的房屋在同一晚上被小偷闯入…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...