Java的继承和实现、接口和抽象类,它们的区别?

之前我写过Java的继承和多态的用处,这次讲讲继承和实现,接口和抽象类的区别,这其实是个很基础的Java知识,但是真的非常重要。特别是在阅读源码的时候,源码里面用了大量的继承和实现,接口以及抽象类,只有弄明白它们的用法,才能在阅读源码的时候体会到“妙啊”的感觉。

简单来说说吧。

1.接口 interface

接口中的字段

接口中的变量使用 public static final 修饰(可以省略),并且需要给出初始值。如果不初始化也会报错。比如:

哪怕你初始化一个null也不报错:

接口中的方法

接口interface里面的方法都是抽象方法,不能有方法体,比如:

只能写成:

并且方法隐式的使用 public abstract 修饰(可以省略,并且只能是 public ,如果是 private,procted,那么就编译报错)。

注意:接口里面abstract可以省略,如果是抽象类里面用抽象方法,abstract是不能省略的。意思是说抽象类里面想定义一个抽象方法(不写方法体)必须带abstract。

2.抽象类 abstract class

相比于接口,抽象类中还可以包含非抽象方法,和字段。抽象方法只能写在抽象类里面,不能写在普通类里面。

所以除接口外,如果你想写一个抽象方法,那就需要定义当前类是抽象类。

3.继承extends和实现implements

继承的好处是代码复用。继承的子类自动拥有父类中的所有属性和方法。所以继承已存在的类就是复用这些类的方法和域。在此基础上,子类还可以添加一些新的方法和域,以满足新的需求。

关于继承的用处,也参考我之前的文章:Java的继承和多态,真的明白它的实际用处吗?

这次我们讲讲继承和实现在语法上有什么区别

1.extends前后保持一致(接口继承接口,类继承类,除了循环继承),否则报错。

注意:如果是类继承类,只能继承一个,此为单继承;如果是接口继承接口,可以继承多个。

2.implements只能是类实现接口。“类实现接口”,就是说implements前面只能是类,implements后面只能跟接口。

如果implements前面是接口,会报下面这个错:

如果implements后面是类(下面的例子OtherPerson是个类,不是接口),会报这个错:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4.25 构建onnx结构模型-Unsuqeeze

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Unsuqeeze 结点进行分析 方式 方法…

java三种注释方式

Java 中的注释有三种: 单行注释:通常用于解释方法内某单行代码的作用。 多行注释:通常用于解释一段代码的作用。 文档注释:通常用于生成 Java 开发文档。

PPT可以转换成电子画册吗

答案是当然可以,PPT是可以转换成电子画册的。电子画册具有3D仿真翻页的效果,而且还可以很好地保存图片和文字信息,并方便在各种设备上查看。 要将PPT转换成电子画册,只需要一个工具就能轻松转换。给大家推荐这款转换工具&#xff…

2023,我所见到的智能中国

有一个我很喜欢的电商官微,经常在半夜发微博,第一句话经常是,“夜深了,跟大家说点掏心窝子的话”。时值年末,我们也不妨效仿一下,来说一点掏心窝子的话吧。 就像往年一样,这一年脑极体团队去了很…

tcp/ip实现两个手机之间连接同步显示

app主界面 选择一:TCP客户端 选择二:TCP服务端 点击下图item时进入曲线绘制页面 如果是服务器端它不需要连任何设备就可以直接进入绘制界面如果是TCP的话就不能直接进入,否则就会提示未连接网络连接不能放在主线程,页面去调方法&…

C#中使用using关键字回收资源

目录 一、一般表达式 二、示例 三、生成 在进行文件操作后要显式调用文件流的Close方法释放文件资源,在使用数据库连接时也要调用连接对象的Close方法释放数据库资源。如果忘记调用Close方法,有可能会导致程序执行异常,而且还会导制垃圾收…

Sentinel-3如何处理并下载LST数据-陆地表面温度”(Land Surface Temperature)

LST 通常指的是“陆地表面温度”(Land Surface Temperature)。陆地表面温度是指地球表面上陆地部分的温度,而不包括水体表面。LST 是遥感技术中一个重要的参数,可以通过卫星遥感等手段进行测量和监测。 陆地表面温度对于许多领域…

Linux磁盘阵列

一.RAID磁盘阵列介绍 RAID(Redundatnt Array of lndependent Disks),全称为:独立冗余磁盘阵列 解释: RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻…

从零开始:使用 BIND 构建和管理您的 DNS 服务器

1 前言 在这篇文章中,我将详细介绍如何使用 BIND(Berkeley Internet Name Domain)软件包中的 named 程序来配置和管理一个基本的 DNS 服务器。 从安装 BIND 开始,到设置 DNS 区域文件,再到运行和测试您的服务器&#x…

[mysql 基于C++实现数据库连接池 连接池的使用] 持续更新中

目背景 常见的MySQL、Oracle、SQLServer等数据库都是基于C/S架构设计的,即(客户端/服务器)架构,也就是说我们对数据库的操作相当于一个客户端,这个客户端使用既定的API把SQL语句通过网络发送给服务器端,MyS…

普中STM32-PZ6806L开发板(HAL库函数实现-无源蜂鸣器响动)

简介 本篇将驱动无源蜂鸣器进行5KHz的响动。电路原理图 蜂鸣器电路原理图 主芯片驱动引脚原理图 其他知识 蜂鸣器类型 蜂鸣器分为 有源蜂鸣器 :触发就会响。 无源蜂鸣器 : 需要给源, 输出一定频率的音频信号, 震动发声; 占空比 为什么占空比总是5…

【Java】SpringBoot快速整合WebSocket实现客户端服务端相互推送信息

目录 什么是webSocket? webSocket可以用来做什么? WebSocket操作类 一:测试客户端向服务端推送消息 1.启动SpringBoot项目 2.打开网站 3.进行测试消息推送 4.后端进行查看测试结果 二:测试服务端向客户端推送消息 1.接口代码 2.使…

权威Scrum敏捷开发企业培训分享

课程简介 Scrum是目前运用最为广泛的敏捷开发方法,是一个轻量级的项目管理和产品研发管理框架。 这是一个两天的实训课程,面向研发管理者、项目经理、产品经理、研发团队等,旨在帮助学员全面系统地学习Scrum和敏捷开发, 帮助企业快速启动敏…

学生数据可视化与分析工具 vue3+flask实现

目录 一、技术栈亮点 二、功能特点 三、应用场景 四、结语 学生数据可视化与分析工具介绍 在当今的教育领域,数据驱动的决策正变得越来越重要。为了满足学校、教师和学生对于数据深度洞察的需求,我们推出了一款基于Vue3和Flask编写的学生数据可视化…

冠赢互娱基于 OpenKrusieGame 实现游戏云原生架构升级

作者:力铭 关于冠赢互娱 冠赢互娱是一家集手游、网游、VR 游戏等研发、发行于一体的游戏公司,旗下官方正版授权的传奇类手游——《仙境传奇》系列深受广大玩家们的喜爱。基于多年 MMORPG 类型游戏的自研与运营经验,冠赢互娱正式推出了 2D M…

【消息中间件】Rabbitmq消息可靠性、持久化机制、各种消费

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、常见用法1.消息可靠性2.持久化机制3.消息积压批量消费:增加 prefetch 的数量,提高单次连接的消息数并发消费:…

Qt Designer中各个模块的详细介绍,小白一看就会!!第3部分——Item Views (Model-Based) 模块介绍

Item Views (Model-Based) 模块的详细介绍 在Qt Designer中,Item Views (Model-Based) 模块是一组基于模型/视图(Model/View)架构的控件,用于展示和操作数据。这些控件与数据模型紧密结合,使得数据展示变得更加灵活和…

关于Sql数据库中去掉字段的所有空格

这篇文章主要介绍了Sql数据库中去掉字段的所有空格小结篇,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 − Sql数据库中去掉字段的所有空格 字符前的空格,用ltrim(string) 字符…

oracle-sga-shared_pool

shared pool 缓冲sql语句和执行计划 shared pool由三部分组成 free libray:缓存sql执行计划 row cathe :缓存数据字典 硬解析:1判断语法2判断对象是否存在3有没有权限4 从n个执行方案中选出最优解,生成执行计划,这一…

Collector收集器的高级用法

Collectors收集器的高级用法 场景1:获取关联的班级名称 原先如果需要通过关联字段拿到其他表的某个字段,只能遍历List匹配获取 for (Student student : studentList) {Long clazzId student.getClazzId();// 遍历班级列表,获取学生对应班级…