高级java每日一道面试题-2024年7月11日

面试官问: 接口和抽象类有什么区别?

我回答:

在Java中,接口(Interface)和抽象类(Abstract Class)都是用于定义一组行为或属性的重要机制,但它们之间存在明显的区别。以下是对它们之间区别的详细解析:

1. 定义方式

  • 接口:使用interface关键字定义,它是一种完全抽象的类型,只包含抽象方法的声明(Java 8及以后版本还可以包含默认方法和静态方法)和常量的定义(默认为public static final)。
  • 抽象类:使用abstract class关键字定义,它是一种不能被实例化的类,可以包含抽象方法和非抽象方法的实现,还可以包含成员变量和构造方法(但构造方法不能用于实例化,主要用于被子类调用)。

2. 实现与继承

  • 接口:一个类可以实现多个接口,使用implements关键字。实现接口的类必须提供接口中所有抽象方法的具体实现(对于Java 8及以上版本的默认方法和静态方法,则可以选择性地覆盖)。
  • 抽象类:一个类只能继承一个抽象类(Java不支持多重继承类),使用extends关键字。继承抽象类的子类可以选择性地实现抽象类中的抽象方法,或者继续将类声明为抽象类。

3. 成员

  • 接口
    • 方法:只能是抽象方法(Java 8及以后版本可包含默认方法和静态方法),且默认访问权限为public
    • 变量:只能是常量(public static final)。
    • 构造方法:不能有构造方法,因为接口不能被实例化。
  • 抽象类
    • 方法:可以是抽象方法(无具体实现)或非抽象方法(有具体实现)。
    • 变量:可以是任何访问修饰符,不限于常量。
    • 构造方法:可以有构造方法,但主要用于被子类调用。

4. 访问修饰符

  • 接口:接口中的方法默认是public的,接口中的变量默认是public static final的。
  • 抽象类:方法可以是publicprotected或默认(包级别)的,变量也可以是任何访问修饰符。

5. 使用场景

  • 接口:通常用于定义一组规范或协议,实现接口的类必须遵循这些规范。接口是实现多重继承的一种手段,允许一个类同时实现多个接口。接口更侧重于“是什么”的层面,定义了一种类型或能力。
  • 抽象类:通常用于定义一些通用的属性和方法,这些方法的具体实现可能由子类来提供。抽象类更侧重于“是什么类型”的层面,定义了一种事物的类型或层次结构。

6. 设计层面的不同

  • 接口:接口是一种行为规范,它代表了一种契约,是辐射式设计的体现。当接口变更时,所有实现该接口的类都需要进行相应的修改。
  • 抽象类:抽象类是一种模板式设计,它作为多个子类的父类,提供了一种公共的模板。当需要添加新的方法时,可以直接在抽象类中添加,而子类不需要进行变更。

结论

接口和抽象类在Java中各有其独特的用途和优势。接口更适合用于定义一组规范或协议,而抽象类则更适合用于定义一些通用的属性和方法。在设计Java程序时,应根据实际需求选择合适的方式来定义类之间的关系。

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

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

相关文章

前端/python脚本/转换-使用天地图下载的geojson(echarts4+如果直接使用会导致坐标和其他信息不全)

解决echarts4如果直接使用天地图下载的geojson会导致坐标和其他信息不全 解决方法是使用python脚本来补全其他信息:center,level,adcode等内容 前提是必须有一个之前使用的json文件(需要全一点的数据供echarts使用) …

Linux文件编程应用

目录 一、实现cp命令 二、修改程序的配置文件 三、写一个整数/结构体到文件 1.写一个整数到文件 2.写一个结构体到文件 四、写结构体数组到文件 我们学习了文件编程的常用指令以及了解文件编程的基本步骤后,试着来写一些程序实现某些功能。(没有学…

记录一次微信小程序申诉定位权限过程

1 小程序接到通知,检测到违规,需要及时处理,给一周的缓冲时间,如果到期未处理,会封禁能力(2023-11-17) 2 到期后,仍未处理,封禁能力(2023-11-24) …

刷题——包含min的队列

包含min函数的栈_牛客题霸_牛客网 使用了两个队列,其中s2里放最小元素,而且多少与s1对齐,如果发现s1的顶小于当前s2的顶,就加入s2中,如果不小于也将s2的顶再放一次,最顶上的元素,绝对是最小的元…

【04】微服务通信组件Feign

1、项目中接口的调用方式 1.1 HttpClient HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 Http 协议的客户端编程工具包,并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传统 JDK 自带的 URLConnectio…

标签页(Tabs)

标签页(Tabs) 标签页(Tabs)是一种常见的用户界面元素,广泛应用于网页设计、移动应用和桌面软件中。它们提供了一种简洁有效的方式来组织内容,允许用户在不同的视图或数据集之间轻松切换。本文将探讨标签页的设计原理、使用场景、最佳实践以及如何在现代网页和应用程序中…

打印任务无法删除怎么办?

在删除打印任务的时候,你可能会遇到这样的情况,当我们想把打印任务取消的时候,却一直显示正在删除,而过了很久还没有取消掉,下面就分享一下处理这个问题的方法。 1、停止打印服务,按WinR键打开运行对话框&a…

Unity WebGL 嵌入前端网页并通信

1. 前言 最近在做项目时遇到需要将 UnityWebGL 嵌入到网页中去,且需要点击网页中的按钮 UnityWebGL 可以做出响应。新建项目部分直接略过 2. 最终效果 3. 基础设置 设置导出平台为WebGL 在Player Settings -> Publishing Settings 中勾选 Data Caching 和Deco…

《Windows API每日一练》9.1.5 自定义资源

自定义资源(Custom Resources)是在 Windows 程序中使用的一种资源类型,用于存储应用程序特定的数据、图像、音频、二进制文件等。通过自定义资源,开发者可以将应用程序所需的各种资源文件集中管理和存储,便于在程序中访…

SpringBoot3+Redis实现分布式锁

SpringBoot3RedisLua脚本实现分布式锁 相关依赖包 <spring-boot.version>3.0.2</spring-boot.version> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </depende…

训练营第九天 | 151.翻转字符串里的单词、55.右旋转字符串、总结回顾

一、题目 151.翻转字符串里的单词 做题思路 代码细节 卡码网&#xff1a;55.右旋转字符串 做题思路 代码细节 二、总结回顾 &#xff08;一&#xff09;字符串总结 代码随想录 &#xff08;二&#xff09;双指针回顾 代码随想录

python多进程刻画进度

问题 python多进程启动4个任务&#xff0c;当前共20个任务&#xff0c;如何刻画当前进度&#xff1f; 解决方案 在 Python 中使用多进程处理多个任务并刻画当前进度&#xff0c;你可以使用 multiprocessing 模块和一个共享变量&#xff08;如 multiprocessing.Value 或 multi…

imx6ull/linux应用编程学习(17)利用mqtt上传开发板数据,和控制开发板led(基于正点)

1.关于如何创建自己的服务器&#xff0c;可看上篇文章 imx6ull/linux应用编程学习&#xff08;16&#xff09;emqx &#xff0c;mqtt创建连接mqtt.fx-CSDN博客 2.实现任务&#xff1a;&#xff08;正点原子教程源码改&#xff09; (1)用户可通过手机或电脑远程控制开发板上的…

小白的OS Copilot 产品测评

背景 通过群友介绍才知OS Copilot 。不想错过任何优秀的AI产品。随着互联网的发展和时代的进步&#xff0c;要紧跟时代&#xff0c;了解市面上的优秀的AI科技产品。 OS Copilot 产品体验评测 1&#xff09;您的角色是什么&#xff1f;开发、运维、学生&#xff1f;如果使用O…

Unity中短路法在背包系统的应用

一、计数法 int counter 0;foreach(GameObject slot in slotList) {if(slot.transform.childCount > 0){counter 1;} }return counter 21;计数法的复杂度为 O(n)&#xff0c;其中n 是插槽的数量。无论插槽是否已满&#xff0c;都会遍历所有插槽。 二、短路法 foreach (…

服务器怎么进PE系统?

服务器进PE是指将服务器的操作系统切换到预安装环境&#xff08;Pre-Installation Environment&#xff09;的状态。在PE环境下&#xff0c;可以进行一些系统管理和故障排除的操作。在进入PE&#xff08;Preinstall Environment&#xff09;之前&#xff0c;首先需要确保你的服…

类和对象——【const成员】【static成员】【友元】【内部类】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件iostream的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

WPF 框架 Prism IActiveAware接口使用

目的 在Prism框架中&#xff0c;IActiveAware接口是一个重要的接口&#xff0c;它允许开发者实现组件或视图的激活和失活逻辑。这通常在需要响应用户界面的可见性或激活状态变化时非常有用&#xff0c;比如在选项卡式界面中切换标签页时。 如何使用IActiveAware IActiveAwar…

css文字自适应宽度动态出现省略号...

前言 在列表排行榜中通常会出现的一个需求&#xff1a;从左到右依次是名次、头像、昵称、徽标、分数。徽标可能会有多个或者没有徽标&#xff0c;徽标长度是动态的&#xff0c;昵称如果过长要随着有无徽标进行动态截断出现省略号。如下图布局所示&#xff08;花里胡哨的底色是…

SpringSecurity中文文档(Servlet OAuth 2.0 Login)

OAuth 2.0 Login OAuth 2.0 Login 功能允许应用程序让用户通过使用 OAuth 2.0 Provider (如 GitHub)或 OpenID Connect 1.0 Provider (如 Google)的现有帐户登录到应用程序。OAuth 2.0 Login 实现了两个用例: “ Login with Google”或“ Login with GitHub”。 OAuth 2.0 Lo…