持续总结中!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,一经查实,立即删除!

相关文章

MySQL 优化 - index_merge 导致查询偶发变慢

文章目录 前言问题描述原因分析总结 前言 今天遇到了一个有意思的问题,线上数据库 CPU 出现了偶发的抖动。定位到原因是一条查询语句偶发变慢造成的,随后通过调整表中的索引解决。 问题描述 下方是脱敏后的 SQL 语句: select oss_path f…

字节跳动后端或大数据基础知识面试题及参考答案(2万字长文)

目录 Redis的数据类型 Redis数据类型的底层数据结构 三次握手、四次挥手 Redis持久化机制

搜索算法系列之三(插值查找)

前言 插值查找仅适用于有序数据、有序数组,和二分查找类似,更讲究数据有序均匀分布。 算法原理 插值查找(interpolation search)是一种查找算法,它与二分查找类似,但在寻找元素时更加智能化。这种算法假设数据集是等距的或者有…

VMP 简单源码分析

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

Python日志记录:全面指南

基本原理 日志记录是软件开发中的一个核心组成部分,它帮助开发者跟踪程序的运行流程,捕获程序执行期间的重要事件。日志记录可以作为程序运行状态的连续监控,记录用户细节、IP地址访问信息等重要数据。当发生错误时,日志不仅提供…

(学习日记)2024.05.12:UCOSIII第六十六节:常用的控制宏介绍 第二部分

之前的章节都是针对某个或某些知识点进行的专项讲解,重点在功能和代码解释。 回到最初开始学μC/OS-III系统时,当时就定下了一个目标,不仅要读懂,还要读透,改造成更适合中国宝宝体质的使用方式。在学完野火的教程后&a…

【LLM】动手部署个人知识库助手

文章目录 动手部署个人知识库助手环境依赖项目运行总结 动手部署个人知识库助手 经过前面章节的学习,理解了LLM、向量知识库等知识,本章节开始实践部署个人知识库助手。 本次部署的项目github地址个人知识库助手项目 环境依赖 技术资源要求 CPU: Int…

MySql#MySql安装和配置

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

分页封装类

加油,新时代打工人! package com.love.starter.common.util;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import java.util.Map;/*** 计算页开始及结束位置** author Administrator*/ public c…

MySQL数据库——20.索引

在 MySQL 中,索引是一种特殊的数据结构,用于快速查找数据库表中的数据。索引可以帮助提高查询速度,特别是对于大型数据表而言,使用索引可以大大减少查询的时间复杂度。 索引类 普通索引(Normal Index)&am…

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

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

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

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

在Ubuntu上搭建并通过systemctl管理Minecraft Java版服务器

本教程将详细介绍如何在Ubuntu操作系统上搭建一个Minecraft Java版服务器,并使用systemctl服务来管理服务器的启动、停止和重启。同时,我们还将探讨如何通过NGINX设置TCP/UDP转发,使得玩家能够通过域名方便地连接到你的Minecraft服务器。 准…

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

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

日志中看到来自User Agent go-http-client / 1.1的大量请求(go-http-client 1.1)服务器爆了

在日志中看到来自User Agent go-http-client / 1.1的大量请求 The go-http-client/1.1 User Agent 是Google的Bot / Crawler 这不是真的。这可能是指Go库(根据您提到的来源,由Google开发,但是我找不到可靠的信息)。 之前写过“G…

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

首先,需要用到的这个工具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…