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

news2025/4/24 3:06:30

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

    • 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💖点点关注,收藏不迷路💖

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

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

相关文章

大规模装箱问题:蜣螂优化算法DBO求解二维装箱问题(MATLAB代码)

一、问题描述 装载率:所有选择的箱子的总面积与夹板面积之比 假设一共有300个箱子,如何设计算法,使得选择部分箱子放入80*80的甲板上,让甲板的装载率越大,要求箱子间不得重叠。 二、蜣螂优化算法求解二维装箱问题 蜣螂优化算法…

八 、VS的调试技巧

--- 24.4.20 目录 1、什么是Bug? 2、什么是调试(Debug)? 3、Debug和Release 4、VS基础调试快捷键 4.1、环境准备 4.2、调试快捷键 5、监视和内存观察 5.1、监视窗口 5.2、内存窗口 6、调试举例1 7、调试举例2 8、调试…

AI宣传文案软件有哪些?5款AI软件推荐

AI宣传文案软件有哪些?AI宣传文案软件在现代营销和创意产业中扮演着越来越重要的角色,它们凭借先进的自然语言处理、机器学习和深度学习技术,不仅解放了创作者的双手,还大大提升了文案的生成效率和质量。这些软件能够精准捕捉用户…

Polarion重启时自动删除.config

Polarion二次开发的插件中,对Servlet新增、修改或删除时,发布到应用需要删除.config文件才能使修改生效,每次需要手动执行,不如加到restart启动脚本中。只需修改start函数即可。 代码如下: vi /opt/polarion/bin/pola…

(科学:某天是星期几)泽勒一致性是由克里斯汀·泽勒开发的用于计算某天是星期几的算法。

(科学:某天是星期几)泽勒一致性是由克里斯汀泽勒开发的用于计算某天是星期几的算法。这个公式是: 其中: h是一个星期中的某一天(0 为星期六;1 为星期天;2 为星期一;3 为星期二;4 为 星期三;5 为星期四;6为星期五)。 q 是某月的第几天。 m 是月份(3 为三月,4 为四月,…

包装类的应用

一.什么是包装类 基本数据类型所对应的引用数据类型 二.集合中不能存储基本数据类型 三.JDK5以后对包装类新增了什么特性? // 自动装箱:把基本数据类型会自动的变成对应的包装类 // 自动拆箱:把包装类自动的变成其对象的基本数据类型 四.我们以后如何获取包…

课设--学生成绩管理系统

欢迎来到 Papicatch的博客 文章目录 🍉技术核心 🍉引言 🍈标识 🍈背景 🍈项目概述 🍈 文档概述 🍉可行性分析的前提 🍈项目的要求 🍈项目的目标 🍈…

全面分析kimi和ChatGPT在论文写作方向的差别

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 Kimi和ChatGPT都是人工智能助手,致力于提供帮助和信息,但在论文写作方面,他们在下面几个方向的能力存在一些差别: 1. 语言支持&#xff…

英语学习笔记35——Our village

Our village 我们的村庄 词汇 Vocabulary photograph n. 照片 通常说:photo 复数:photos     picture 复数:pictures 搭配:take a photo 照相 以o结尾的单词复数es的: potato —— potatoes tomato —— tomatoe…

AI + Web3 Social Hackathon 来啦!报名参赛瓜分超 700,000+ 美元奖金池

“我们的目标是将 Web3 优质开发者聚集在一起,共同打造创新思维驱动的链上世界。无论你是经验丰富的开发者,还是刚踏上开发旅程的小白新手,都可以加入我们, 不断提升实战技能,让 AIWeb3 成为赋能未来的重要砝码。” 为…

DiffusionDet:用于物体检测的扩散模型

论文标题:DiffusionDet: Diffusion Model for Object Detection 论文地址:https://arxiv.org/pdf/2211.09788 DiffusionDet:用于物体检测的扩散模型 检测模型发展物体检测 DiffusionDet方法预备知识DiffusionDet前向扩散过程DiffusionDet反向…

MaptrV2代码阅读

一 数据处理(后续补充) 二 模型结构 2.1 BackboneNeck 这里输入不加时序的单帧图片,一共六张,输入图片大小为 B ∗ 6 ∗ 3 ∗ 480 ∗ 800 ( B 是 b a t c h s i z e ) B*6*3*480*800 (B是bat…

java中的输入与输出(I/O)

Java I/O(输入/输出)是Java程序与外部世界进行交互的重要机制,它允许程序读取和写入数据到各种类型的源,如文件、网络套接字、管道、内存缓冲区等。Java I/O API主要位于java.io包中,提供了丰富的类和接口来处理不同类…

ipad协议已更新

mmtls 24算法,by golang 其他/v1/other POST/v1/other/GetPeopleNearby 查看附近的人 POST/v1/other/GetQrCode 获取二维码 同步消息/v1/ws GET/v1/ws/GetSyncMsg 同步消息,ws协议 消息/v1/message POST/v1/message/AddMessageMgr 添加要发送…

知识表示与推理方法前沿文献报告

✅作业要求: 练习目标:以公开发表的英文学术文献如会议和期刊论文为依据,报告知识表示与推理的前沿研究进展 作业形式: 8-10页的调研报告,以Word或者PDF为文件格式,文件名: 学号 姓名 krdocx/PDF作业完成内容: 1.题目: 文献报告-文…

车道偏离预警系统技术规范(简化版)

车道偏离预警系统技术规范(简化版) 1 系统概述2 预警区域3 功能条件4 显示需求5 指标需求 1 系统概述 车道偏离预警系统工作在中高速驾驶的情况下,当驾驶员因注意力不集中导致车辆偏离本车道时,系统通过光学和声学信号对驾驶员进行…

vue+elementUI实现在表格中添加输入框并校验的功能

背景: vue2elmui 需求: 需要在一个table中添加若干个输入框,并且在提交时需要添加校验 思路: 当需要校验的时候可以考虑添加form表单来触发校验,因此需要在table外面套一层form表单,表单的属性就是ref…

6月17日15点丨解锁大消费品行业收入管理秘籍

在数字化浪潮席卷全球的今天,企业对于收入管理的精细化和智能化需求日益凸显。收入管理作为企业运营的核心环节,对企业的现金流、利润和发展战略至关重要。 在消费品行业,往往拥有大量的销售数据和客户信息,但这些数据往往分散在多个系统和部…

简单了解MySql以及一些简单的应用MySql

MySql基础篇 1、数据模型概述 关系型数据库 概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。 特点: 使用表存储数据,格式统一,便于维护使用SQL语言操作,标准统一,使用方便 数…

基于WPF技术的换热站智能监控系统08--实现右上模式控制

1、区域划分 2、UI设计 3、样式及触发器 4、运行效果 走过路过不要错过,点赞关注收藏又圈粉,共同致富,为财务自由作出贡献