Java中有接口了为什么还需要有抽象类,抽象类和普通类和接口,三者之间有什么区别和联系

在 Java 中,接口、抽象类和普通类都是不同的概念,各自有其特定的用途和特性。了解它们之间的区别和联系有助于更好地利用 Java 的面向对象编程特性。

接口(Interface)

  1. 定义:

    • 接口是一种完全抽象的类,它允许声明方法但不允许实现它们(直到 Java 8 引入默认方法之前)。
  2. 用途:

    • 用于定义一个合同或协议,类可以实现一个或多个接口,从而承诺提供接口中定义的行为。
  3. 特性:

    • 从 Java 8 开始,接口可以包含默认方法和静态方法。
    • 只能有静态和非静态抽象方法。
    • 成员变量默认是 public static final。

抽象类(Abstract Class)

  1. 定义:

    • 抽象类是不能实例化的类,它可以包含抽象方法(没有具体实现的方法)和具体方法。
  2. 用途:

    • 用于提供一个基础类,其中包含一些共享的代码和/或仅提供方法声明的抽象方法。
  3. 特性:

    • 可以有构造函数、字段、方法(包括具体方法和抽象方法)。
    • 可以有访问修饰符,用于控制子类的继承。
    • 子类必须实现所有抽象方法,除非子类也是抽象类。

普通类(Class)

  1. 定义:

    • 普通类是可以实例化的类,它定义了对象的结构和行为。
  2. 用途:

    • 用于创建具体的对象实例,实现具体的业务逻辑。
  3. 特性:

    • 可以包含字段、方法、构造函数等。
    • 可以继承其他类(单继承)并实现多个接口。

区别和联系

  • 共同点:

    • 接口和抽象类都不能被实例化。
    • 它们都可以包含抽象方法,用于指定子类必须实现的行为。
  • 不同点:

    • 抽象类可以包含具体的方法和字段,而接口只能包含抽象方法(直到 Java 8 引入默认方法和静态方法)。
    • 类可以实现多个接口,但只能继承一个抽象类。
    • 接口成员默认是 public,而抽象类成员可以有不同的访问级别。
  • 使用场景:

    • 如果你想定义一个不允许实例化的基础类并提供一些共享代码,使用抽象类。
    • 如果你想定义一个合同或协议,让多个类可以实现但不提供共享代码,使用接口。

简而言之,接口和抽象类在 Java 中都用于定义不能直接实例化的类型,并允许其他类继承或实现它们,从而共享或承诺特定的行为。普通类则是可以直接实例化的具体实现,提供了具体的业务逻辑和数据结构。

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

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

相关文章

【23真题】难!下沙“小清华”难度爆增!

今天分享的是23年“下沙小清华”杭州电子科技大学843的信号与系统试题及解析。 本套试卷难度分析:22年杭电843考研真题,我也发布过,若有需要,戳这里自取!平均分为112分,最高分为145分!该院校23…

Impala VS Hive

Impala和Hive的关系 Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析,实现了Hive的SQL语义的子集,功能还在不断的完善中。 与Hive的…

如何用CHAT理解数理化?

问CHAT:扇形面积的概念,简单阐述一下。 CHAT回复: 扇形面积是指扇形这种二维几何图形所覆盖的区域大小。 扇形是一个圆的一部分,是由圆心出发的两条射线(半径)和这两条射线所夹角决定的圆周上的弧线所围成…

近期为何事故频发,企业安全生产如何保障?

近期,多地陆续发生了一系列企业安全生产事故,给企业和员工带来了严重的生命和财产损失,引发了社会各界对安全生产问题的广泛关注。安全生产是企业发展的重要保障,然而,企业在追求经济效益的过程中,往往忽视…

为虚幻引擎开发者准备的Unity指南

目录 1.前言2.编辑器2.1 Scene 视图(视口)2.2 Game 视图 (Play in Editor)2.3.Hierarchy 窗口 (World Outliner)2.4 Project 窗口(Content Browser)2.5 Inspector (Details)2.6 Console(消息视图/输出日志)2.7 Modes 面板在哪里&a…

​​​​​​​3分钟实现EG网关串口连接麦格米特PLC

EG网关串口连接麦格米特PLC 前言:麦格米特PLC广泛应于工业控制领域,是一款性能高、稳定性强的PLC设备。此文档将介绍如何使用EG系列网关通过串口连接麦格米特PLC,并添加到EMCP物联网云平台,实现电脑Web页面、手机APP和微信对麦格米…

【Rxjava详解】(一)观察者模式的拓展

文章目录 RxJava引入扩展的观察者模式RxJava的观察者模式基本实现 RxJava入门示例Action RxJava引入 在介绍RxJava之前先说一下Rx。全称是Reactive Extensions,直译过来就是响应式扩展 Rx基于观察者模式,它是一种编程模型,目标是提供一致的…

uniapp:如何实现点击图片可以全屏展示预览

这个需要使用uniapp中的api&#xff1a;uni.previewImage&#xff0c;使用方法如下 1、html <template><view><image src"图片路径" click"preview"></image></view> </template> 2、JavaScript <script> e…

pyhive的离线安装及使用示例

pyhive离线安装 pyhive下载离线安装包 下载方式一:直接把jieba包下载到/download/pip/目录下 pip download -d /download/pip/ pyhive[hive_pure_sasl]下载方式二:建一个requirement.txt文件里面一行一行写需要的包,/usr/local/download/pip/是下载目录 pip download -d /d…

怎么判断list是否为null

List<Entity> baseMess new ArrayList<>(); baseMess motiveService.getBaseMessage(machine.get(i),preDate,nowDate); System.out.println("获取Size"baseMess.size()); baseMess.removeIf(Objects::isNull); System.out.println("获取Size"…

Cannot read property ‘pickAlgorithm‘ of null

Cannot read property pickAlgorithm of null 报错显示 node 和 npm的版本号不对应 查看版本号 node -v npm -v node的版本对应 Previous Releases | Node.js (nodejs.org) 我们需要改成对应的mpm版本号 npm install npm6.14.12 -g nodejs与npm版本对应关系以及使用nvm管理n…

『亚马逊云科技产品测评』活动征文|利用EC2云服务器快速部署一个SpringBoot项目

&#xff08;授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道&#xff09; 1. 前言 本文主要是对亚马逊云科技的EC2进行体…

前端字符串方法汇总

1、length属性 const sss lengthconsole.log(字符串长度是, sss.length) 2、chartAt() charAt()和charCodeAt()方法都可以通过索引来获取指定位置的值&#xff1a; charAt() 方法获取到的是指定位置的字符&#xff1b;charCodeAt()方法获取的是指定位置字符的Unicode值。 …

Java基于B/S架构,包括PC后台管理端、APP移动端、可视化数据大屏的智慧工地源码

智慧工地管理平台充分运用数字化技术&#xff0c;聚焦施工现场岗位一线&#xff0c;依托物联网、互联网、AI等技术&#xff0c;围绕施工现场管理的人、机、料、法、环五大维度&#xff0c;以及施工过程管理的进度、质量、安全三大体系为基础应用&#xff0c;实现全面高效的工程…

【算法-哈希表5】看似哈希,实则双指针。

今天&#xff0c;带来哈希表和双指针相关算法的讲解。文中不足错漏之处望请斧正&#xff01; 理论基础点这里 四数之和 题意简化 四数之和&#xff0c;去重版&#xff1a;找不重复的四元组 四元组四个元素下标不同, 和为target四元组不重复 由于输出四元组的顺序没有限制, …

MySQL之BETWEEN AND包含范围查询总结

一、时间范围 查询参数格式与数据库类型相对应时&#xff0c;between and包含头尾&#xff0c;否则依情况 当数据库字段中存储的是yyyy-MM-dd格式&#xff0c;即date类型&#xff1a; 用between and查询&#xff0c; 参数yyyy-MM-dd格式时&#xff0c;包含头尾&#xff0c;相当…

Java虚拟机(JVM)的调优技巧和实战2

JVM是Java应用程序的运行环境&#xff0c;它负责管理Java应用程序的内存分配、垃圾收集等重要任务。在JVM的默认设置下&#xff0c;可能存在一些性能问题&#xff0c;因此需要进行调优。在本次分享中&#xff0c;作者将介绍一些实用的JVM实战调优技巧&#xff0c;以提高Java应用…

JVM 监控命令详解

文章目录 JDK 中与常用命令行工具jpsjstatjinfojmap导出 dump 文件查看堆内存信息 jstack JVM 可视化分析工具 JDK 中与常用命令行工具 jps 查看当前服务器正在执行的 Java 进程 $> jps 7584 Application 16433 AdminApplication 14209 Jps 5813 Bootstrap 5575 TestApplic…

HTML+CSS+ElementUI搭建个人博客静态页面展示(纯前端)

网站演示 搭建过程 技术选取:HTML/CSS VUE2 ElementUI(Version - 2.15.14)编程软件:VSCode 环境配置与搭建 安装指令 1. 先确保你的电脑已经安装好了npm和node npm -vnode -v2. ElementUI下载&#xff0c;推荐使用 npm 的方式安装 npm i element-ui -S3. CDN引入 <!--…