Java 继承与实现

一、继承(extends)

1.1 继承概念

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

继承图

上图中,“动物”、“食草动物”、“食肉动物”以及各种具体的动物类型,都相当于 Java 中的类,而它们之间的“父子”关系就是继承,每一种具体动物类型的实际个体就是对象,或者说是类的实例。

Java 中继承通过 extends 关键字来声明:

class Father {}class Son extends Father {}

1.2 继承模式

一般来说,面向对象编程语言应该有四种继承模式,但 Java 中只有三种继承模式:单继承、多重继承和多态。某些面向对象语言还具有多继承的继承模式,如 Python。下面一张图生动地展示了四种继承模式的区别。

继承模式(图片来源于菜鸟教程 www.runoob.com)

上图中“不同类继承同一个类”指的就是多态。

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 {} // 多实现

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

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

相关文章

数据结构与算法-栈

栈和队列是两种常用的线性结构,属于特殊的线性表,是线性表相关运算的一个子集。一般来说,线性表上的插入和删除操作不受任何限制,但栈只能在表的一端进行插入和删除操作,而队列则只能在一端进行插入操作,在…

物联网市场规模迅速增加,在交通、医疗、农业等方面发展势头迅猛

物联网(Internet of things)是一系列用于解决物的信息识别、交换、控制等技术的集合应用形成的网络。当连接从互联网时代的人与人走向万物互联,万物的数字化、智能化依赖物联网技术。因此,物联网是指利用各类信息识别设备&#xf…

Ceph介绍与部署

Ceph介绍与部署 一、存储基础1.1、单机存储设备1.1.1、单机存储的问题 1.2、商业存储解决方案1.3、分布式存储(软件定义的存储 SDS)1.3.1、分布式存储的类型 二、Ceph 简介三、Ceph 优势四、Ceph 架构五、Ceph 核心组件5.1、Pool中数据保存方式支持两种类…

Vue2实现图片预览功能 -- v-viewer:图片查看器

一. 先看效果图 二. 具体步骤 简介:一款基于 viewer.js 封装的Vue版插件,可用于图像查看,以及图片的旋转、缩放等功能预览 官网:v-viewer 文档说明:Vue图片浏览组件v-viewer,支持旋转、缩放、翻转等操作 - …

Ultra-Fast-Lane-Detection-v2 裁剪数据增强

目录 标注拆分为独立文件加载并数据增强 Ultra-Fast-Lane-Detection-v2 裁剪数据增强 main方法是调用示例

Android Studio的笔记--HttpURLConnection使用GET下载zip文件

HttpURLConnection使用GET下载zip文件 http get下载zip文件MainActivity.javaAndroidMainfest.xmlactivity_main.xmllog http get下载zip文件 MainActivity.java 用HttpURLConnection GET方法进行需注意: 1、Android 9及以上版本需要设置这个,否则会有…

网络爬虫实践小结

背景 近期工作中要解决两个问题,一个是数据组需要网爬一些图片数据,另外一个是要批量爬取公司用于文档协同的一个网站上的附件。于是乎,就写了两个脚本去完成任务。 爬虫思路 第一步:向确定的url发送请求,接收服务器…

[小林coding]4.2TCP重传,滑动窗口,流量控制,拥塞控制_1013

1.重传 1.1 超时重传 两个情况: a 数据包丢失 b ack应答丢失 RTT:网络包往返的时间(不是一个定值) RTO:超时重传的时间间隔(也是一个动态的) RTO设置的时间长:浪费时间资源&…

grafana api创建dashboard 记录

文章目录 json model导入申请api key创建dashboard删除dashboard json model导入 直接在ui通过json model 导入,开发自己用还好,但对非开发人员不太友好,故考虑通过api后台自动创建 api doc : https://grafana.com/docs/grafana/v9.3/devel…

AR动态贴纸SDK,让创作更加生动有趣

在当今的社交媒体时代,视频已经成为了人们表达自我、分享生活的重要方式。然而,如何让你的视频在众多的信息中脱颖而出,吸引更多的关注和点赞呢?答案可能就在你的手中——美摄AR动态贴纸SDK。 美摄AR动态贴纸SDK是一款专为视频编辑…

R语言——赋值(= ,<- ,<<-)

R语言 R语言——赋值&#xff08; &#xff0c;<- &#xff0c;<<-&#xff09; 文章目录 R语言一、 与 <- 的区别二、 <<- ,向上一环境层写入变量 R语言中" <- " 与 " " 都可以用来赋值&#xff0c;但R中建议使用" <- “…

ESP32网络开发实例-UDP数据发送与接收

UDP数据发送与接收 文章目录 UDP数据发送与接收1、UDP简单介绍2、软件准备3、硬件准备4、代码实现本文将详细介绍在Arduino开发环境中,如何实现ESP32通过UDP协议进行数据发送与接收。 1、UDP简单介绍 用户数据报协议 (UDP) 是一种跨互联网使用的通信协议,用于对时间敏感的传…

Linux开发工具:vim的介绍和用法及其简单配置

前言 Vim 简介. 编辑. Vim是从 vi 发展出来的一个文本编辑器。. 代码补全、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用&#xff0c;和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。. [1] vim的设计理念是命令的组合。. 用户学习了各种各样的…

【统计学概念】初学者指南:了解置信区间

一、说明 什么是置信区间&#xff1f;如何将概率转化成信心度&#xff1f;信心度如何去工作&#xff1f;这些初步的统计概念需要明晰&#xff0c;然后才能应用统计模型&#xff0c;然后是贝叶斯推理&#xff0c;我们将逐步深入这些概念。 二、总体与样本个体统计 总体是研究人…

【Unity】【VR】详解Oculus Integration输入

【背景】 以下内容适用于Oculus Integration开发VR场景,也就是OVR打头的Scripts,不适用于OpenXR开发场景,也就是XR打头Scripts。 【详解】 OVR的Input相对比较容易获取。重点在于区分不同动作机制的细节效果。 OVR Input的按键存在Button和RawButton两个系列 RawButton…

比较和同步数据库架构和数据:MssqlMerge Pro Crack

比较和同步数据库架构和数据 适用于Oracle、MySQL 和 MariaDB、SQL Server、PostgreSQL、SQLite、MS Access和跨 DBMS 场景 业界领先的文本比较工具中常用的两面板 UI 快速过滤器显示所有/新/更改/新更改 合并两个方向的更改 轻量级&#xff1a;跨 DBMS 工具小于 20 MB&#xf…

数据结构之手撕顺序表(增删查改等)

0.引言 在本章之后&#xff0c;就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握&#xff0c;如果有小伙伴对上面相关的知识还不是很清晰&#xff0c;要先弄明白再过来接着学习哦&#xff01; 那进入正题&#xff0c;在讲解顺序表之前&#xff0c;我们先来介绍…

代码随想录——图论一刷day03

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣130. 被围绕的区域二、力扣417. 太平洋大西洋水流问题三、力扣827. 最大人工岛 前言 一、力扣130. 被围绕的区域 class Solution {boolean[][] flag;i…

JavaScript-es6-新版语法-export-import

文章目录 1.export2.import3.export default 命令4.总结 在JavaScript ES6中&#xff0c;export与export default均可用于导出常量、函数、文件、模块等。模块功能主要由两个命令构成&#xff1a;export和import。export命令用于规定模块的对外接口&#xff0c;import命令用于输…

接口测试文档

接口测试的总结文档 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什么要做&#xff1f; 第二部分&#xff1a;主要介绍为什…