当前位置: 首页 > news >正文

【面试干货】抽象类和接口的区别

【面试干货】抽象类和接口的区别

    • 1、抽象类
      • 1.1、什么是抽象类?
      • 1.2、示例代码
    • 2、接口
      • 2.1、什么是接口?
      • 2.2、示例代码
    • 3、比较和总结
      • 3.1、使用场景
      • 3.2、关键区别
      • 3.3、代码示例比较


💖The Begin💖点点关注,收藏不迷路💖

在面向对象编程中,抽象类(abstract class)和接口(interface)是常用的概念,它们虽然有一些相似之处,但也有一些重要的区别。下面我们来详细比较一下这两者之间的异同。

1、抽象类

1.1、什么是抽象类?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class)。抽象类用于创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现这些方法。

以下是抽象类的一些特性:

1、不能实例化:不能创建abstract class的实例。

2、可以包含具体方法和抽象方法:抽象类可以包含具体的方法实现和抽象方法。

3、子类必须实现抽象方法:抽象类的子类必须为其所有抽象方法提供实现,否则子类也必须声明为抽象类。

4、不能有抽象构造函数或抽象静态方法

1.2、示例代码

// 定义抽象类
abstract class Animal {// 抽象方法,没有方法体public abstract void makeSound();// 具体方法,有方法体public void sleep() {System.out.println("Sleeping...");}
}// 子类实现抽象方法
class Dog extends Animal {public void makeSound() {System.out.println("Bark");}
}

2、接口

2.1、什么是接口?

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。接口提供了一种多继承的机制,通过实现多个接口,类可以具有多重行为。

以下是接口的一些特性:

1、所有方法都是抽象的:接口中的所有方法默认都是public abstract,没有方法体。

2、只能定义静态常量:接口中只能包含static final成员变量。

3、实现类必须实现所有方法:实现接口的类必须实现接口中声明的所有方法。

4、接口允许多继承:一个类可以实现多个接口。

2.2、示例代码

// 定义接口
interface Animal {void makeSound(); // 抽象方法
}// 类实现接口
class Dog implements Animal {public void makeSound() {System.out.println("Bark");}
}

3、比较和总结

  • 抽象类:用于定义基本行为,子类需要提供具体实现,不允许有抽象构造函数或抽象静态方法。

  • 接口:所有方法都是抽象的,实现多继承性,实现类需要提供所有方法的具体实现,只能包含静态常量。

3.1、使用场景

抽象类: 当需要为一组相关的类提供一个公共的基类并包含一些公共的代码实现时,使用抽象类。

接口: 当需要定义一组不相关类可以实现的行为,并且希望支持多继承时,使用接口。

3.2、关键区别

1、方法实现:

abstract class:可以包含具体的方法实现。

interface:所有方法都是抽象的,没有方法体。

2、成员变量:

abstract class:可以有普通成员变量。

interface:只能有static final常量。

3、继承:

abstract class:子类使用extends关键字继承,一个类只能继承一个抽象类。

interface:实现类使用implements关键字实现,一个类可以实现多个接口。

3.3、代码示例比较

// 使用抽象类
abstract class Vehicle {public abstract void startEngine(); // 抽象方法public void stopEngine() { // 具体方法System.out.println("Engine stopped.");}
}class Car extends Vehicle {public void startEngine() {System.out.println("Car engine started.");}
}
// 使用接口
interface Vehicle {void startEngine(); // 抽象方法
}interface Stopable {void stopEngine(); // 抽象方法
}class Car implements Vehicle, Stopable {public void startEngine() {System.out.println("Car engine started.");}public void stopEngine() {System.out.println("Car engine stopped.");}
}

通过以上比较,我们可以看到,抽象类和接口各有优缺点,选择哪一种取决于具体的需求和设计目标。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

相关文章:

【面试干货】抽象类和接口的区别

【面试干货】抽象类和接口的区别 1、抽象类1.1、什么是抽象类?1.2、示例代码 2、接口2.1、什么是接口?2.2、示例代码 3、比较和总结3.1、使用场景3.2、关键区别3.3、代码示例比较 💖The Begin💖点点关注,收藏不迷路&am…...

python爬虫:实现动态网页的爬取,以爬取视频为例

引言: 爬虫也被称为网络蜘蛛(Spider),是一种自动化的软件程序,能够在互联网上漫游,按照一定的规则和算法抓取数据。 爬虫技术广泛应用于搜索引擎、 数据挖掘 、信息提取等领域,是互联网技术的重要组成部分。 摘要: 作为爬虫的初学者,网页越简单越好,因为网页的结构…...

Incredibuild for Mac 来了!

Mac 开发者在寻找适合自己需求的工具时可能会遇到一些困难,因为 Mac 操作系统相对封闭,不像其他系统那样开放和灵活。尽管如此,Mac 开发者在开发应用程序时的需求(比如功能、效率等)和使用其他操作系统的开发者是类似的…...

递归解析 LXML 树并避免重复进入某个节点

1、问题背景 我们在使用 LXML 库解析 MathML 表达式时,可能会遇到这样一个问题:在递归解析过程中,我们可能会重复进入同一个节点,导致解析结果不正确。例如,我们希望将以下 MathML 表达式解析为 Python 表达式&#x…...

GaussDB技术解读——GaussDB架构介绍(三)

目录 9 智能关键技术方案 智能关键技术一:自治运维系统 智能关键技术二:库内AI引擎 智能关键技术三:智能优化器 10 驱动接口关键技术方案 GaussDB架构介绍(二)从数据持久化存取层(DataNode)关键技术方案、全局事…...

解锁ChatGPT:从原理探索到GPT-2的中文实践及性能优化

⭐️我叫忆_恒心,一名喜欢书写博客的研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支…...

【WPF】中的ListBox的ScrollIntoView方法使用

在WPF中,ListBox控件的ScrollIntoView方法用于确保指定的项在可视区域内可见。如果该项不在当前的视图中,该方法会滚动列表,使该项出现在视图中。这对于在用户交互或程序逻辑中需要突出显示特定列表项的场景非常有用。但是不会指定滚动的对齐…...

信息安全等级保护测评(等保测评)定级的重要性与实施路径

#等保测评##黑龙江等保测评##哈尔滨等保测评# 在数字化转型的浪潮中,信息安全已成为保障国家安全、社会稳定及企业发展的基石。信息安全等级保护测评(简称“等保测评”),作为中国网络安全领域的基础性制度,为组织机构的…...

Python库

Python库 babel huey 图片视频处理 moviepy 一个用于视频编辑的Python模块,可用于进行视频的基本操作(如剪切、连接、标题插入)、视频合成(也称非线性编辑)、视频处理或创建高级效果 patchworklib 一个专注于图像拼接和合成的Python库 patchworklib 一个专注与图…...

pytest+requests+allure自动化测试接入Jenkins学习

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 最近在这整理知识,发现在pytest的知识文档缺少系统性,这里整理一下&…...

你能不能手敲出Spring框架?

Spring最成功的地方在于创始人Rod Johnson提出的IOC、AOP核心理念,反而不是其本身的技术。技术上今天可以有Spring春天,明天就可以有Autumn秋天。 核心理念有多重要?就如1871年巴黎公社的失败。公社在对抗法国zf和普鲁士占领军的背景下成立&…...

实体店如何通过私域获取流量?

随着互联网的快速发展和消费者购物习惯的变化,私域流量对于实体店的重要性日益凸显。私域流量是指企业在自己的平台上沉淀的、可以免费使用、多次利用的流量,如微信生态下的朋友圈、公众号、企业微信等。对于实体店而言,有效利用私域流量不仅…...

互联网与人工智能时代:问题的新形态与解答的挑战

随着互联网的普及和人工智能技术的飞速发展,我们仿佛进入了一个答案触手可及的新时代。然而,就在我们以为问题将因此逐渐减少之时,实则问题的形态和内涵正在发生深刻的变化。因此,我们不应简单地将互联网和人工智能视为解决问题的…...

机器学习与数据挖掘知识点总结(二)分类算法

目录 1、什么是数据挖掘 2、为什么要有数据挖掘 3、数据挖掘用在分类任务中的算法 朴素贝叶斯算法 svm支持向量机算法 PCA主成分分析算法 k-means算法 决策树 1、什么是数据挖掘 数据挖掘是从大量数据中发现隐藏在其中的模式、关系和规律的过程。它利用统计学、机器学…...

MySQL数据库初体验

目录 1.数据库基本概念 1.1 数据Data 1.2 表 1.3 数据库 1.4 数据库管理系统(DBMS) 1.5 数据库系统(DBS) 2.数据库的发展 3.主流的数据库介绍 3.1 SQL Server(微软公司产品) 3.2 Oracle (甲骨文公司产品&…...

关于RDMA传输的基本流量控制

Basic flow control for RDMA transfers | The Geek in the Corner (wordpress.com) 名词解释 IB : InfiniBand的缩写,指的就是InfiniBand技术。 MAD : Management Datagram的缩写。MAD是InfiniBand架构中用于设备管理和配置的一种特殊消息…...

Android Studio新增功能:Device Streaming

今天将Android Studio升级到2023.3.1 Patch2。发现新增了Device Streaming功能。支持远程使用Google的物理设备调试程序。这样可以方便地在真实设备上测试自己的APP。这对于手头没有Google设备的开发者而言,确实方便很多。该功能目前处于测试阶段,在2025…...

实施ISO 26262与ISO 21434的关键要素分析

随着汽车工业的快速发展和智能化水平的不断提升,汽车的功能性和安全性成为了消费者关注的重点。为了确保车辆的安全性和可靠性,国际标准化组织(ISO)制定了一系列与汽车安全相关的标准,其中ISO 26262(道路车…...

WinForm之TCP服务端

目录 一 原型 二 源码 一 原型 二 源码 using System.Net; using System.Net.Sockets; using System.Text;namespace TCP网络服务端通讯 {public partial class Form1 : Form{public Form1(){InitializeComponent();}TcpListener listener null;TcpClient handler null;Ne…...

【TB作品】MSP430 G2553 单片机 口袋板 日历 时钟 闹钟 万年历 电子时钟 秒表显示

文章目录 功能介绍操作方法部分流程图代码录制了一个演示视频可以下载观看 功能介绍 时间与日期显示: 实时显示当前时间(小时、分钟、秒)和日期(年、月、日)。 闹钟功能: 设置闹钟时间(小时、分…...

推流工具OBS的下载使用

一、下载安装 OBS,windows版本官网下载地址 二、推流步骤 安装好之后,打开软件 1、右下角,打开设置 2、输入推流地址,一般为rtmp格式开头的推流地址 输入完成后,应用并确定关闭窗口 3、“来源”里面新建媒体源、新…...

【设计模式之外观模式 -- C++】

外观模式 – 统一接口,简化调用 外观模式(Facade Pattern)是一种常用的软件设计模式,它为子系统中的一组接口提供了一个统一的高层接口,使得子系统更易于使用。外观模式定义了一个高层接口,这个接口使得这…...

【课程总结】Day8(上):深度学习基本流程

前言 在上一篇课程《【课程总结】Day7:深度学习概述》中,我们了解到: 模型训练过程→本质上是固定w和b参数的过程;让模型更好→本质上就是让模型的损失值loss变小;让loss变小→本质上就是求loss函数的最小值&#xf…...

论文发表知网//新课程//简介//投稿指南

【新课程】杂志是国家新闻出版署批准,山西省新闻出版局主管,由山西三晋报刊传媒集团主办、北京师范大学科学传播与教育研究中心协办的教育类学术期刊。 【新课程】属于山西省一级、国家二级期刊,主要围绕教学改革和实践方面的问题进行探讨和研…...

全面解析AdaBoost:多分类、逻辑回归与混合分类器的实现

1. 使用 AdaBoost 完成多分类和逻辑回归问题 多分类 AdaBoost 原本是为二分类问题设计的,但可以扩展到多分类问题。常用的方法包括 One-vs-All (OVA), AdaBoost.MH (Multiclass, Multi-Label) 和 AdaBoost.MR (Multiclass Ranking)。下面对每种方法进行详细介绍。…...

UE5实战篇二(对话系统1):导语

实现一款商业游戏中使用的对话系统插件。 虚幻商店链接: https://www.unrealengine.com/marketplace/zh-CN/product/0b84eaa9343543f58138bc4956a2fa8f 1. 内容可配置 2. 多分支对话、旁白对话、对话序列动画、文字显示及各种特效 3. 可配置文字、音效、呈现位…...

无人机的发展

朋友们,你们知道吗?无人机的发展之路可谓是科技界的一股清流,风头正劲啊!从最初简单的遥控飞机到现在各种智能功能的加持,无人机真是越来越神奇了! 首先,无人机在航拍领域大放异彩!无…...

MySQL和MariaDB的对比和选型

目录 1 基本介绍 2 功能对比 3 性能对比 4 兼容性 5 社区支持和发展 6 安全性 7 选择建议 8 结论 除去功能本身的对比,相应各位看官不一定能看出太大所以然,而且对于大部分同学来说,使用起来感觉应该差不多。 所以综合来说&#xff0…...

Android11 后台启动Activity

在 Android 10 (API 29) 及更高版本(包括 Android 11),系统对后台启动 Activity 施加了严格的限制。默认情况下,应用程序在后台无法启动 Activity,以提高用户体验并减少不必要的干扰。以下为解决方法。 From 7d554af386150edec1cd68f6eaf700538af4e373 Mon Sep 17 00:00:0…...

这4款国产软件,因为太良心好用,甚至被误认为是外国人开发的

说起国产软件,大家总是容易给它们打上“流氓、要钱、广告满天飞”的标签,其实,有些小众的软件超级好用,功能强大又不耍流氓,真心不该被一棍子打死。 1、sunlight studio Sunlight Studio是一个开源、免费、无广告的硬…...