抽象类 vs 接口:它们有何异同?

在面向对象编程中,抽象类和接口是两种非常重要的概念,它们各自扮演着不同的角色,但又有一些相似之处。本文将详细探讨抽象类和接口的不同点与相同点。

相同点

  1. 不能被实例化:无论是抽象类还是接口,都不能直接创建其实例。抽象类作为多个子类的共同父类,提供了一种模板式设计;而接口则定义了一组行为规范,不涉及具体的实现细节。

  2. 包含抽象方法:抽象类和接口都可以包含抽象方法,即没有具体实现的方法。这些方法需要在子类或实现类中具体实现。

  3. 位于继承树的顶端:抽象类和接口都位于类的继承结构的顶端,为子类或实现类提供了一套规范或模板。

不同点

设计目的与用途

  • 抽象类:作为多个子类的共同父类,体现的是一种模板式设计。它可以包含部分已实现的方法(即具体方法),也可以包含抽象方法。抽象类主要用于提取共性,进行约束,并作为系统实现过程中的中间产品。

  • 接口:接口体现的是一种规范,类似于整个系统的总纲,它制订了系统各模块应该遵循的标准。接口只包含抽象方法(在Java 8及以后版本中,接口还可以包含default方法和static方法,但这些方法仍然不是接口的主要用途),不包含任何实现细节。接口主要用于定义一组行为规范,使得不同的类可以以不同的方式实现相同的行为。

成员定义

  • 抽象类:可以包含普通方法(即具体实现的方法)、静态方法、静态和非静态属性(包括private、protected和public修饰的属性)。抽象类中的抽象方法不能用private、static、synchronized和native等访问修饰符修饰,且方法体必须以分号结尾,不带花括号{}。

  • 接口:只能包含抽象方法(Java 8及以后版本可以包含default方法和static方法)、静态常量属性(默认修饰符为public static final)。接口中的方法默认是public abstract的,属性默认是public static final的,且必须在声明时初始化。接口不能有构造方法、静态代码块或普通成员变量。

继承与实现

  • 抽象类:一个类只能继承一个抽象类(Java中类的单继承原则),使用关键字extends。

  • 接口:一个类可以实现多个接口,使用关键字implements。接口之间支持多继承,即一个接口可以继承多个其他接口。

访问修饰符

  • 抽象类:其成员(包括方法和属性)可以有不同的访问修饰符,如private、protected和public。

  • 接口:其成员(包括方法和属性)默认是public的,且不能改变。接口中的方法默认是public abstract的,属性默认是public static final的。

设计理念

  • 抽象类:更倾向于“is-a”的关系,即子类“是”一个更具体的抽象类。它提供了一种模板式设计,允许子类继承并实现部分或全部抽象方法。

  • 接口:更倾向于“has-a”的关系,即类“有”某种行为或能力。它定义了一组行为规范,使得不同的类可以以不同的方式实现这些行为。

使用场景

  • 当需要累积功能时,使用抽象类。抽象类可以包含部分已实现的方法,为子类提供了一定的功能基础。

  • 当需要定义一组行为规范,且不希望这些规范被修改时,使用接口。接口提供了一种灵活的扩展方式,允许不同的类以不同的方式实现相同的行为。

综上所述,抽象类和接口在面向对象编程中各有其独特的用途和优势。理解它们的不同点和相同点,有助于我们更好地设计和实现面向对象的系统。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

大模型分布式训练并行技术(一)-概述

近年来,随着Transformer、MOE架构的提出,使得深度学习模型轻松突破上万亿规模参数,传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此,我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…

Gitee基本指令操作

目录 1.概念 2. git的基本指令 3. .gitignore 文件 4 . Linux git || gitee || github 1.概念 Git是一种版本控制的软件。 Git是免费且开源的。 Git常被称为 去中心化的分布式的 数据存储。 【其实git也可以进行本地版本控制。对于git,可理解为是一个 本地版本…

超轻量级电竞体验,还有8K超高回报率,雷柏VT1 Air MAX上手

PC玩家想要获得更精彩的游戏体验,除了要关注主机上显卡、CPU等方面的配置,还需要键、鼠标的操控体验跟得上节奏,而在这方面,国产品牌雷柏算是行业里的翘楚,尤其是这两年,连续不断的推出了多个电竞系列鼠标&…

3. 函数

函数是 JavaScript 编程中最重要的工具之一。用一个值封装一段程序的概念有很多用途。它为我们提供了一种结构化大型程序的方法,可以减少重复,将名称与子程序关联起来,并将这些子程序相互隔离。 函数最明显的应用是定义新的词汇。在散文中创造…

2024 天池云原生编程挑战赛决赛名单出炉,冠军来自中山大学、昆仑数智战队

9 月 20 日,2024 天池云原生编程挑战赛决赛答辩完美落幕,12 支进入决赛的团队用精彩的答辩,为历时 3 个月的大赛画下了圆满的句号。其中,来自中山大学的陈泓仰以及来自昆仑数智的冉旭欣、沈鑫糠、武鹏鹏, 以出色的方案…

Nordic软件二[蓝牙协议栈初始化卡死(时钟源默认外部晶振但是板子是内部RC)问题][BSP代码模块修改管脚和相关机制]

蓝牙协议栈初始化卡死(时钟源默认外部晶振但是板子是内部RC)问题 本文摘录于:https://blog.csdn.net/chengbaojin/article/details/103778150只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人! 先参考上面的文章做如下修改: …

中国科学院云南天文台博士招生目录

中国科学院云南天文台是专业基础研究与应用研究结合的综合性天文研究机构(其前身是1938年中央研究院天文研究所在昆明东郊凤凰山创建的凤凰山天文台),总部在云南省昆明市,设有两个观测站(丽江高美古天文观测站和澄江抚…

使用通义灵码,参与开源项目全程纪实

作者:shuipin100-34561 背景 缘起 OceanBase。作为一个充满好奇心的 DBA,一直一来想探寻数据库的内部世界。开源为我们这些好奇的猫打开了一扇新世界的大门。OceanBase 作为分布式关系型数据库的排头兵,自然进入了我的优选名单。起初走进了…

ComfyUI中缺失节点安装一点小小注意事项

加载工作流,遇到了红当当的缺失节点警告窗口: 在ComfyUI-Manager点击安装缺失节点,发现竟然弹出4个,而上面告警窗口中只是缺失3个,究竟是怎么回事呢,刚开始接触ComfyUI时,我也是不管3721&#x…

04 面部表情识别:Pytorch实现表情识别-表情数据集训练代码

总目录:人脸检测与表情分类 https://blog.csdn.net/whiffeyf/category_12793480.html 目录 0 相关资料1 面部表情识数据集2 模型下载3 训练0 相关资料 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码):https://blog.csdn.net/guyuealian/article/details/1…

【c语言数据结构】超详细!模拟实现双向链表(初始化、销毁、头删、尾删、头插、尾插、指定位置插入与删除、查找数据、判断链表是否为空)

特点: 结构:指向前一结点指针数据指向后一结点指针由于循环,尾结点的下一结点next指向头结点(哨兵结点)空的双向链表只有自循环的哨兵结点(头结点) 模拟实现双向链表 LIST.h #define _CRT_…

【WorldView系列卫星】

WorldView系列卫星 WorldView系列卫星是美国DigitalGlobe公司推出的一系列先进商业遥感卫星,旨在提供高分辨率的地球成像服务。该系列卫星以其卓越的成像能力,如高分辨率、快速重访时间和宽幅扫描能力,引领了地球观测技术的新标准。以下是对…

最新版C/C++通过CLion2024进行Linux远程开发保姆级教学

目前来说,对Linux远程开发支持相对比较好的也就是Clion和VSCode了,这两个其实对于C和C语言开发都很友好,大可不必过于纠结使用那个,至于VS和QtCreator,前者太过重量级了,后者更是不用说,主要用于…

110Redis 简明教程--Redis 数据类型

Redis strings 字符串是一种最基本、最常用的 Redis 值类型。 Redis 字符串是二进制安全的,这意味着一个 Redis 字符串能包含任意类型的数据,例如: 一张经过 base64 编码的图片或者一个序列化的 Ruby 对象。通过这样的方式,Redis …

双亲委派机制SPI

SPI如何破坏双亲委派机制?可根据以下概念一步步深入 什么是双亲委派机制? 双亲委派机制是Java类加载器体系中采用的一种类加载策略,旨在保证类加载的安全性和稳定性。 这一机制规定了类加载的顺序和规则,即当一个类加载器收到类…

创建单链表

一、完成单链表操作,要求节点构造类型。 1、建立学生结构体(学号,姓名,成绩) 2、循环调用头插法创建整表 3、遍历单链表 4、任意位置插入一个完整的学生信息 5、任意位置删除一个学生。 6、单链表逆置 7、单链表按照学…

SpringBoot框架在文档管理中的创新应用

第3章 系统分析 3.1 需求分析 在线文档管理系统主要是为了提高工作人员的工作效率和更方便快捷的满足员工,更好存储所有数据信息及快速方便的检索功能,对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑员工的可操作性,遵循…

ELK-03-skywalking监控linux系统

文章目录 前言一、下载node_exporter二、启动node_exporter三、下载OpenTelemetry Collector四、启动OpenTelemetry Collector4.1 将配置文件下载到同级目录4.2 启动 五、查看总结 前言 skywalking安装完成后,开始我们的第一个监控-监控linux系统。 参考官方文档&a…

最古早的linux发行版,已发行30年!!

最古早的linux发行版,已发行30年!! 当谈到 Linux 发行版时,大多数人首先想到的可能是像 Ubuntu、Fedora 或 CentOS 这样的知名发行版。然而,在 Linux 的世界中,还有一款古老而稳定的发行版,它以…

SIGformer: Sign-aware Graph Transformer for Recommendation---论文学习笔记

SIGIR 2024 用于推荐的符号感知图像转换器 摘要 在推荐系统中,大多数基于图的方法主要关注用户的正面反馈,而忽视了负面反馈的价值。而将正负反馈结合起来形成符号图可以更全面地理解用户偏好。然而,现有的尝试整合这俩种类型反馈的方法很…