持续总结中!2024年面试必问 100 道 Java基础面试题(三十二)

上一篇地址:持续总结中!2024年面试必问 100 道 Java基础面试题(三十一)-CSDN博客

六十三、接口里面可以写方法实现吗?

在Java中,接口(Interface)主要用于定义一组抽象方法,这些方法可以被实现接口的类具体实现。然而,从Java 8开始,接口也可以包含具有默认实现的方法,即默认方法(Default Methods)和静态方法(Static Methods)。以下是接口中可以包含的方法实现类型:

默认方法(Default Methods)

  • 目的:允许在不破坏现有实现的情况下为接口添加新方法。
  • 声明:使用default关键字声明,后面跟着方法体。
  • 实现:接口中可以提供默认实现,实现接口的类可以选择使用这个默认实现,也可以覆盖它。

静态方法(Static Methods)

  • 目的:提供工具类的功能,允许在接口中定义一些静态的工具方法。
  • 声明:直接在接口中声明,不需要default关键字。
  • 实现:接口中提供静态方法的实现,实现接口的类可以直接调用这些静态方法。

示例代码

interface MyInterface {// 抽象方法,必须由实现接口的类实现void abstractMethod();// 默认方法,接口提供了默认实现default void defaultMethod() {System.out.println("Default method implementation");}// 静态方法,接口提供了方法实现static void staticMethod() {System.out.println("Static method implementation");}
}class MyClass implements MyInterface {@Overridepublic void abstractMethod() {System.out.println("Abstract method implementation");}@Overridepublic void defaultMethod() {System.out.println("Overridden default method implementation");}
}public class Main {public static void main(String[] args) {MyClass myObject = new MyClass();myObject.abstractMethod(); // 调用抽象方法myObject.defaultMethod(); // 调用覆盖后的默认方法// 直接调用接口中的静态方法MyInterface.staticMethod();}
}

在这个示例中,MyInterface接口包含了一个抽象方法abstractMethod(),一个默认方法defaultMethod()和一个静态方法staticMethod()MyClass实现了MyInterface接口,并提供了abstractMethod()的实现,同时覆盖了defaultMethod()以提供自定义的实现。staticMethod()可以直接通过接口调用。

注意事项

  • 抽象方法:实现接口的类必须实现所有的抽象方法,除非该类被声明为抽象类。
  • 默认方法:如果多个继承的接口提供了具有相同签名的默认方法,实现类必须重写该方法以解决冲突,或者通过super关键字显式地选择使用哪一个接口的默认实现。
  • 静态方法:不能被实现接口的类重写,因为它们属于接口,而不是实现类的一部分。

总结来说,虽然接口主要用于定义抽象方法,但Java 8之后,接口也可以包含默认方法和静态方法,这两种方法都可以在接口中提供具体实现。这为接口的使用提供了更大的灵活性,使得接口可以适应更多的编程场景。

六十四、抽象类必须要有抽象方法吗?

不,抽象类不必须包含抽象方法。在Java中,抽象类是使用 abstract 关键字声明的类,它允许包含抽象方法,也可以不包含。抽象类的主要目的是作为其他类的基类,提供一个通用的模板或框架。

抽象类的目的

  1. 提供一个通用的模板:定义一些通用的属性和方法,这些方法可以在子类中被重写以实现特定的行为。
  2. 实现部分功能:抽象类可以包含一些具体的实现,这些实现不需要在子类中改变。
  3. 不完整实现:抽象类可以定义一些未完成的方法(抽象方法),这些方法的具体实现留给子类完成。

抽象方法

  • 抽象方法:没有方法体的方法,只有声明,它使用 abstract 关键字声明。
  • 抽象类中可以有抽象方法,这样做的目的是强制任何继承该抽象类的子类都必须提供这些抽象方法的实现。

示例代码

abstract class Animal {// 抽象方法,必须由子类实现abstract void makeSound();// 具体方法,子类可以直接继承或重写void eat() {System.out.println("The animal is eating.");}
}class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Woof woof!");}
}public class Main {public static void main(String[] args) {Animal myAnimal = new Dog(); // 使用抽象类的引用myAnimal.makeSound(); // 输出 "Woof woof!"myAnimal.eat(); // 输出 "The animal is eating."}
}

在这个示例中,Animal 是一个抽象类,它包含一个抽象方法 makeSound() 和一个具体方法 eat()Dog 类继承自 Animal 并提供了 makeSound() 的实现。

注意事项

  • 不能实例化:由于抽象类可能包含未完成的方法,因此不能直接实例化。必须通过创建其子类的实例来使用抽象类。
  • 继承:抽象类可以继承其他抽象类或具体类,并且可以被子类继承。
  • 成员变量:抽象类可以包含成员变量,这些变量可以是具体的,也可以是抽象的(即没有具体的实现)。

总结来说,抽象类不一定非要有抽象方法,它可以包含任何类型的成员:具体方法、抽象方法、成员变量等。抽象类的主要角色是作为一个模板,为其他类提供一个通用的框架,同时强制实现某些未完成的方法。

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

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

相关文章

VMP 简单源码分析

虚拟机 获取CPU的型号 实现了一个指令集解释器,每个操作码对应一个特定的处理函数,用于执行相应的指令操作。在执行字节码时,解释器会根据操作码查找并调用相应的处理函数来执行指令。 截获异常 先由虚拟机处理 处理不了再抛出异常 priva…

MySql#MySql安装和配置

目录 一、卸载不需要的环境 二、安装mysql yum 源 三、开始安装 四、如果保证安装成功呢? 五、MySql 启动! 六、登录mysql 七、配置文件说明 八、设置开机启动! 本次安装是在Linux环境在centos7中完成 首先先将自己切换成root 一、…

基于springboot实现图书电子商务网站系统项目【项目源码+论文说明】

基于springboot实现图书电子商务网站系统演示 摘要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱…

flowable流程跳转或退回到网关上的用户节点后流程走不下去了

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

【JVM】class文件格式,JVM加载class文件流程,JVM运行时内存区域,对象分配内存流程

这篇文章本来只是想讲一下class文件格式,讲着讲着越讲越多。JVM这一块吧,知识比较散比较多,如果深研究下去如死扣《深入理解Java虚拟机》,这本书很深很细,全记住是不可能的,其实也没必要。趁这个机会直接把…

如何快速找出文件夹里的全部带有中文纯中文的文件

首先,需要用到的这个工具YTool: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 步骤 1、打开工具,切换到批量复制文件 2、鼠标移到右侧,点击搜索添加 3、设定查找范围、指定为文件、勾选 包含全部子文件夹&…

FP16与BF16区别

二者都是占用16bit空间。 FP16由1个符号位、5个指数位和10个尾数位组成。FP16在表达小数时具有较高的精度,但表示的最大范围相对BF16比较小。相比BF16,在表达较大的数时更容易出现上溢的情况。BF16由1个符号位、8个指数位和7个尾数位组成。相比于FP16&a…

RFC 791 (1)-导论

目录 浅论 IP是啥 IP可以管啥 操作 范例查看 提示:本系列将会开始RFC文档阅读,这里会给出我的一些笔记 浅论 我们这篇RFC文档描述的是IP和ICMP协议,我们都知道,在传统的OSI七层或者是现在被简化的五层:应用层&…

2024年Q1季度果酒行业线上市场数据分析:女性消费力量强劲!

随着短视频推广和健康饮酒理念的盛行,果酒凭借酒精度数低、口味丰富、富含多种营养成分等优势逐渐受到了消费者的青睐。 Q1季度,消费者对果酒需求依旧旺盛。根据鲸参谋数据显示,今年Q1季度,线上电商平台(某猫&#xf…

6S管理,真的有必要吗?

工厂里的物料不知道是什么时间堆放的,不知道这个是谁的,不知道还有没有用,不知道该不该处理掉,越积越多,想要的东西总是找不着,不要的东西总是“碍手碍脚”……可怕的是大家对这一些现象习以为常。 说起6S…

搬运5款小众,无广告,实用性拉满的软件

​ 你是否喜欢一些小众且无广告的软件?如果是的话,我这边有一些给你推荐的。 1.屏幕录制——OBS Studio ​ OBS Studio是一款广泛使用的实时流媒体和屏幕录制软件,适用于Windows、MacOS、Linux平台。它采用C、C和Qt编写,提供高质…

Keepalived实现LVS高可用

6.1 KeepalivedLVS集群介绍 Keepalived和LVS共同构建了一个高效的负载均衡和高可用性解决方案:LVS作为负载均衡器,负责在集群中的多个服务器间分配流量,以其高性能和可扩展性确保应用程序能够处理大量的并发请求;而Keepalived则作…

如何使用DEEPL免费翻译PDF

如何使用DEEPL免费翻译PDF 安装DEEPL取消PDF限制 安装DEEPL 安装教程比较多,这里不重复。 把英文pdf拖进去,点翻译,在下面的框中有已经翻译完毕的文档。 但是存在两个问题 问题1:这些文档是加密的。 问题2:带有DeepL标…

C#知识|上位机UI设计-详情窗体设计思路及流程(实例)

哈喽,你好啊,我是雷工! 上两节练习记录了登录窗体和主窗体的实现过程,本节继续练习内容窗体的实现,以下为练习笔记。 01 详情窗体效果展示: 02 添加窗体并设置属性 在之前练习项目的基础上添加一个Windows窗体,设置名称为:FrmIPManage.cs 设置窗体的边框和标题栏的外…

flink sql 优化

文章目录 一、参数方面二、资源方面三、总结 提示:实时flink sql 参考很多网上方法与自己实践方法汇总(版本:flink1.13) 一、参数方面 flink sql参数配置 //关闭详细算子链(默认为true),true后job性能会略微有提升。false则可以展示更详细的DAG图方便地位性能结点…

go mod

常用命令 初始化模块 go mod init 模块名下载 go.mod 文件中指明的所有依赖 go mod download github.com/gin-gonic/ginv1.9.(依赖路径)依赖对其(使引用的都是所依赖的) go mod tidy编辑go.mod go mod edit go mod edit -require"github.com/g…

jvm 马士兵 01 JVM简介,class文件结构

01.JVM是什么 JVM是一个跨平台的标准 JVM只识别class文件,符合JVM规范的class文件都可以被识别 u1 是一个字节 u2是两个字节

5款采用AMD Instinct MI300芯片的超酷AI和HPC服务器

我们收集了戴尔科技、联想、超微和技嘉的五款超酷人工智能和高性能计算服务器,这些服务器使用 AMD 的 Instinct MI300 芯片,该芯片于几个月前推出,旨在挑战 Nvidia 在人工智能计算领域的主导地位。 AMD 正在凭借其 Instinct MI300 加速器芯片…

新手必看!场外个股期权的权利金估算公式

场外个股期权的权利金估算公式 场外个股期权的权利金估算公式通常涉及多个因素,这些因素共同决定了权利金的具体数额。虽然具体的估算公式可能因不同的交易平台、交易规则和标的资产而有所差异,但一般来说,权利金的计算会考虑以下几个关键要…

毕业单纯的钻研嵌入式知识有前景吗?

毕业之后单纯地去钻研嵌入式知识到底有没有前景呢?不可否认的是,嵌入式领域有着较高的薪资待遇,并且还存在着巨大的上升空间。然而,要学习嵌入式开发并非易事,其中存在着诸多挑战。其中一个挑战就是需要深入理解计算机…