整理好了!2024年最常见 100 道 Java基础面试题(三十五)

上一篇地址:整理好了!2024年最常见 100 道 Java基础面试题(三十四)-CSDN博客

六十九、接口是否可以继承接口?

在Java中,接口可以继承其他接口。这种继承关系允许一个接口扩展另一个接口中定义的常量和抽象方法,从而实现接口的多继承。接口继承是Java多态性的一个重要方面,它允许一个类实现多个接口,从而继承多个接口的行为。

接口继承的特点

  1. 多继承:Java不允许类之间的多继承,因为可能会导致菱形问题(Diamond Problem),但允许接口之间的多继承。

  2. 扩展:一个接口可以通过使用 extends 关键字来继承一个或多个其他接口。

  3. 组合:一个类可以实现多个接口,这相当于实现了这些接口的组合。

  4. 抽象方法:继承的接口中定义的抽象方法必须在实现该接口的类中得到具体实现。

  5. 默认方法(Java 8及以后):从Java 8开始,接口可以包含具有默认实现的默认方法。如果多个继承的接口中存在具有相同签名的默认方法,实现接口的类必须重写该方法以解决冲突。

  6. 静态常量:接口中的变量默认是 public static final 的,因此它们相当于静态常量。继承的接口中的静态常量可以被直接访问。

示例

public interface Flyable {void fly();
}public interface Swimmable {void swim();
}public interface FlyAndSwim extends Flyable, Swimmable {// 可以添加额外的方法或默认实现
}public class Bird implements FlyAndSwim {@Overridepublic void fly() {System.out.println("The bird is flying.");}@Overridepublic void swim() {System.out.println("The bird is swimming.");}
}

在这个示例中,FlyAndSwim 接口继承了 FlyableSwimmable 两个接口。Bird 类实现了 FlyAndSwim 接口,并提供了 fly()swim() 方法的具体实现。

注意事项

  • 接口继承必须使用 extends 关键字。
  • 接口继承不会导致菱形问题,因为Java的接口实现是隐式的,不需要显式地调用父类构造方法。
  • 接口继承可以用于实现接口之间的代码复用,但应该谨慎使用,以避免过度复杂化类和接口的关系。

总结

接口继承是Java中实现多态性和代码复用的一种方式。它允许一个接口扩展另一个接口,从而使得类可以实现多个接口并继承它们的行为。接口继承是Java接口设计的核心特性之一,它提供了一种灵活的方式来组合和扩展行为。

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

在Java 8之前,接口里面只能包含抽象方法和常量。这意味着接口中的方法没有方法体,实现这些方法的责任完全由实现接口的类来承担。然而,从Java 8开始,接口可以包含具有方法体的默认方法,以及静态方法。

默认方法

默认方法使用 default 关键字声明,提供了一种方式让接口可以具有方法的实现,而不需要实现接口的类重新实现这些方法。默认方法的引入主要是为了允许在不破坏现有实现了旧版本接口的代码的情况下,向接口中添加新的方法。

public interface MyInterface {void abstractMethod();default void defaultMethod() {System.out.println("Default method implementation in the interface.");}
}

实现该接口的类可以选择调用默认方法,也可以重写默认方法以提供自己的实现。

静态方法

Java 8还允许接口包含静态方法。静态方法是与接口关联的,而不是与实现接口的类的对象关联的。静态方法可以在不创建对象的情况下直接调用,并且它们通常用于工具方法或辅助方法。

public interface MyInterface {static void staticMethod() {System.out.println("This is a static method in the interface.");}
}

注意事项

  • 默认方法和静态方法都不能被声明为 abstract
  • 默认方法可能会引起冲突,如果一个类实现了多个接口,而这些接口中有一个或多个具有相同签名的默认方法,那么这个类必须重写这些方法以解决冲突。
  • 接口的主要用途是定义一个规范,允许不同的类以统一的方式实现这些规范。引入默认方法和静态方法后,接口不仅可以定义规范,还可以提供一些实现细节。

示例

public interface Animal {void eat();default void sleep() {System.out.println("Animal is sleeping.");}static void classification() {System.out.println("Animals are living organisms.");}
}public class Dog implements Animal {@Overridepublic void eat() {System.out.println("Dog is eating.");}@Overridepublic void sleep() {System.out.println("Dog is sleeping soundly.");}public static void main(String[] args) {Animal.classification(); // 调用接口中的静态方法Dog dog = new Dog();dog.eat(); // 调用实现的方法dog.sleep(); // 调用重写后的默认方法}
}

在这个示例中,Dog 类实现了 Animal 接口,并重写了 sleep() 默认方法。同时,main 方法中直接调用了接口中的静态方法 classification()

总结

从Java 8开始,接口不仅可以包含抽象方法,还可以包含默认方法和静态方法。这为接口提供了更多的灵活性,允许在接口中提供一些默认的行为和工具方法,同时也为接口的演化提供了更好的支持。

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

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

相关文章

STL——函数对象和谓词

函数对象 概念 重载函数调用操作符()的类,其对象常被称为仿函数 函数对象使用重载的()时,行为类似函数调用,也叫做仿函数 本质上仿函数是一个类,并不是一个函数 函数对象使用 函数对象在使用时,可以像普通函数一样…

【QT学习】14.线程学习

一。线程了解 线程是计算机科学中的一个重要概念,它是操作系统能够进行运算调度的最小单位。线程是进程中的一个执行流,一个进程可以包含多个线程。与进程相比,线程更轻量级,可以更高效地利用计算机资源。 线程有以下几个特点&…

Spring Boot应用部署 - Tomcat容器替换为Undertow容器

Tomcat容器替换为Undertow容器 要在Spring Boot应用中将默认的Tomcat容器替换为Undertow容器,可以按照以下步骤进行操作: Maven项目配置 排除Tomcat依赖:首先,你需要从spring-boot-starter-web依赖中排除Tomcat。在你的pom.xml文…

OpenCV|简单绘制一个矩形

OpenCV中的rectangle() 为绘制矩形命令,形式如下: # (img: cv2.typing.MatLike, pt1: cv2.typing.Point, pt2: cv2.typing.Point, color: cv2.typing.Scalar, thickness: int ..., lineType: int ..., shift: int ...)cv2.rectangle(img, pt1, pt2, …

Dynamic Extraction of Subdialogues for Dialogue Emotion Recognition

对话情感识别的子对话动态提取 摘要1. 介绍2 相关工作2.1 对话上下文建模2.2 常识知识 3 方法3.1 问题定义3.2 模型概述3.3 特征提取模块3.4 依赖性建模3.5 交互式子对话提取模块3.6 重要性增强的多头自注意力模块3.7 子对话框主题提取模块3.8. 分类模块 四、实验4.1 数据集4.1…

含义:理财风险等级R1、R2、R3、R4、R5

理财风险等级R1、R2、R3代表什么,为什么R1不保本,R2可能亏损 不尔聊投资https://author.baidu.com/home?frombjh_article&app_id1704141696580953 我们购买理财产品的时候,首先都会看到相关产品的风险等级。风险等级约定俗成有5级&…

Java进阶07集合(续)

Java进阶07 集合(续) 一、数据结构(树) 1、关于树 1.1 相关概念 节点:树中每个单独的分支 节点的度:每个节点的子节点数量 树高:树的总层数 根节点:最顶层节点 左子节点&…

Python专题:三、数字和运算(2)

目录 一、数学运算 二、赋值运算 一、数学运算 1、运算符号 加法 减法- 乘法* 除法/ 计算机中浮点数表示有精度限制,Python有限,所以近似取数 2、除法取整// Python2中 整数/整数 值为整数 Python3中 整数/整数 整数or浮点数 //计算除法对结果取…

2024年最适合做的母婴赛道,选品思路揭秘,教你如何选品!

大家好,我是电商花花。 在我印象中,每年都有人唱衰抖音小店不好做了,太卷了,普通人没有机会了,但是现在直播电商时代,很多信息都会片面的,做不好并不是因为不好做,而是因为你做不好…

60*13薪,外包到新疆...去吗?

大家好,我是白露呀。 今天我在牛客上看到一篇帖子,一位网友说自己收到一个 offer ,薪资很高:60k*13,大约一年有近80万。 但是有个要求是外包到新疆的乌鲁木齐,他拿不定主意,就在牛客上发了这个…

Crocoddyl 使用教程(二)

系列文章目录 前言 小车摆杆是另一个经典的控制实例。在这个系统中,一根欠驱动的杆子被固定在一辆一维驱动的小车顶部。游戏的目的是将杆子升到站立位置。 模型如下: https://en.wikipedia.org/wiki/Inverted_pendulum 我们用 表示小车质量、 表示摆杆质…

Agent Hospital: 一种可进化医疗代理人的医院模拟器

论文来源: https://arxiv.org/pdf/2405.02957 1 引言 大型语言模型(LLM)代理在各种任务中表现出了有前景的性能,包括代码生成、信息博弈和问答等。受 LLM 代理能力的启发,一些研究采用它们来模拟人类互动和行为,而不是处理单一任务,例如社交媒体上的信息传播和"Stanford…

Pyside6详细使用教程python之GUI开发

1、首先需要安装Pyside6,终端执行命令: pip3.10 install pyside6 2、你们的一般是 pip install pyside6 2、如下代码创建一个简易程序导入必要的模块 import sys from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton,…

【网络】tcp的初始化序列号为什么要随机生成

TCP序列号和确认序列号 在TCP协议中,每个数据包都包含一个序列号和一个确认序列号,用于实现可靠的数据传输和流量控制。 序列号(Sequence Number):序列号是发送端为每个发送的数据包分配的唯一标识,用于标…

c语言实现贪吃蛇小游戏————附全代码!!!

目录 1.Win32 API 1.1控制台应用程序 1.2控制台的名称,控制台窗口大小 1.3设置控制台光标位置 COORD - 光标坐标 GetStdHandle - 获取句柄 SetConsoleCursorPosition - 设置光标位置 封装一个设置光标的函数 1.4设置控制台光标的属性 CONSOLE_CURSOR_INFO …

HNU-人工智能-作业1

人工智能-作业1 计科210x 甘晴void 第1题 考虑一个实时的在线电话翻译系统,该系统实现英语与日语之间的实时在线翻译,讨论该系统的性能度量,环境,执行器,感知器,并对该环境的属性进行分析。(10…

【Android】源码解析Activity的结构分析

源码解析Activity的结构分析 目录 1、Activity、View、Window有什么关联?2、Activity的结构构建流程3 源码解析Activity的构成 3.1 Activity的Attach方法3.2 Activity的OnCreate 4、WindowManager与View的关系总结 1、一个Activity对应几个WindowManage&#xff0…

Java 中的 HTTP 客户端库OkHttp、Apache HttpClient和HttpUrlConnection

大家好,我是G探险者。 项目开发里面经常会有这么一种场景:与服务器进行 HTTP 通信。一般存在于服务间远程调用的场景 Java 生态系统提供了多种 HTTP 客户端库,每种都有其自己的特点、优势和适用场景。 本文将介绍几种主要的 Java HTTP 客户…

基于Springboot的校园招聘系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校园招聘系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

modprobe: can‘t open ‘modules.dep‘: No such file or directory

使用modprobe会提示modprobe: cant open modules.dep: No such file or directory 直接输入depmod即可。 如果depmod没有效果,则需要重新配置编译你的根文件。 在busybox配置界面进入linux Module Utilities, 上下键选择depmod,并按 y 选中&#xff0c…