整理好了!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 {
    @Override
    public void fly() {
        System.out.println("The bird is flying.");
    }

    @Override
    public 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 {
    @Override
    public void eat() {
        System.out.println("Dog is eating.");
    }

    @Override
    public 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.mfbz.cn/a/604402.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis(主从复制搭建)

文章目录 1.主从复制示意图2.搭建一主多从1.搭建规划三台机器(一主二从)2.将两台从Redis服务都按照同样的方式配置(可以理解为Redis初始化)1.安装Redis1.yum安装gcc2.查看gcc版本3.将redis6.2.6上传到/opt目录下4.进入/opt目录下然…

ACM实训冲刺第一天

目录 ACM实训课程考核 考核内容 备赛安排 推荐学习资源 ACM实训准备规划 前话 历届习题(未曾改变) 第0套 第1套 第2套 第3套 第4套 规划 5.8 - 5.12 (11周) 5.13-5.19(12周) 5.20-5.26&…

解放双手,利用自动点赞软件提高曝光度

在数字时代,社交媒体如同一片繁茂的森林,每一条动态、每一张照片都是树上挂着的果实,而点赞则仿佛是那些吸引眼球的色彩。在这个以流量为王的网络世界里,点赞数往往与内容的可见度直接相关,它不仅能够增加帖子的权重&a…

智能家居4 -- 添加接收消息的初步处理

这一模块的思路和前面的语言控制模块很相似&#xff0c;差别只是调用TCP 去控制 废话少说&#xff0c;放码过来 增添/修改代码 receive_interface.c #include <pthread.h> #include <mqueue.h> #include <string.h> #include <errno.h> #include <…

渐进淡出背景个人导航页源码(火影版)

渐进淡出背景个人导航页源码&#xff08;火影版&#xff09; 效果图部分源码领取源码下期更新预报 效果图 部分源码 <!DOCTYPE html> <html> <head> <!--小K网 www.xkwo.com --><meta charset"UTF-8"><title>火影版个人主页<…

如果出现一个工具,可以让前端开发彻底不用再手写UI,这个工具意义大吗?干货!

求这样的一个工具&#xff0c;可以让后端开发、嵌入式开发、产品经理、UI设计师都能用&#xff0c;注意&#xff0c;不是在一个简单的静态页生成&#xff0c;也不是类似飞冰那种 generator &#xff0c;而是真正让设计师和开发者在各自的那侧达成自治&#xff0c;可以做到吗&am…

异构图神经网络——Heterogeneous Graph Neural Networks

相关代码见文末 1.回顾同构图 1.1 GNN GNN基本计算方法——邻接矩阵乘以节点,聚合相邻节点的特征,得到本节点的特征表达 1.2 Graph Attention Network 引入图注意力,实现边的权重可学习,最简单的方法是,将两个节点的特征进行拼接,使用一组可学习的权重参数映射为边的权…

搜狗输入法 PC端 v14.4.0.9307 去广告绿化版.

软件介绍 搜狗拼音输入法作为众多用户计算机配置的必备工具&#xff0c;其功能的全面性已为众所周知&#xff0c;并且以其高效便捷的输入体验受到广大使用者的青睐。然而&#xff0c;该软件在提供便利的同时&#xff0c;其内置的广告元素常常为用户带来一定的干扰。为此&#…

游戏理解入门:Rust+Bracket开发一个小游戏

1. Game loop 使用game loop可以使得游戏运行更加流畅和顺滑&#xff0c;它可以&#xff1a; 初始化窗口、图形和其他资源&#xff1b;每当屏幕刷新他都会运行(通常是每秒30,60 )&#xff1b;每次通过循环&#xff0c;他都会调用游戏的tick()函数。 大致的原理流程如下&…

利用生成式AI重新构想ITSM的未来

对注入 AI 的生成式 ITSM 的需求&#xff0c;在 2023 年 Gartner AI 炒作周期中&#xff0c;生成式 AI 达到预期值达到顶峰后&#xff0c;三分之二的企业已经将生成式 AI 集成到其流程中。 你问为什么这种追求&#xff1f;在预定义算法的驱动下&#xff0c;IT 服务交付和管理中…

又发现一个ai生成音乐的网站-heymusic

网址 https://heymusic.ai/ 尴尬&#xff0c;不挂梯子能登录进来&#xff0c;但是谷歌账号注册不了&#xff0c;刷新了几遍也没注册上。 看了下价格&#xff0c;应该不是免费的&#xff0c;所以也没了试用的兴趣。 我也不想用别的邮箱注册了&#xff0c;所以只能简单的水一…

固定资产管理系统参考论文(论文 + 源码)

【免费】固定资产管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89282536 固定资产管理系统 摘 要 随着计算机信息技术的发展以及对资产、设备的管理科学化、合理化的高要求&#xff0c;利用计算机实现设备及资产的信息化管理已经显得非常重要。 固…

IO 5.8日

1&#xff1a;使用 dup2 实现错误日志功能 使用 write 和 read 实现文件的拷贝功能&#xff0c;注意&#xff0c;代码中所有函数后面&#xff0c;紧跟perror输出错误信息&#xff0c;要求这些错误信息重定向到错误日志 err.txt 中去 2&#xff1a;判断一个文件是否拥有用户可写…

LeetCode509:斐波那契数(使用动态规划)

题目描述 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 n > 1…

BFS专题——FloodFill算法:200.岛屿数量

文章目录 题目描述算法原理代码实现CJava 题目描述 题目链接&#xff1a;200.岛屿数量 PS:注意题目中每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。也就是说斜角是不算了&#xff0c; 例如示例二&#xff0c;是三个岛屿。 算法原理 这道题目是 DFS&#xff0…

三维天地助力实验室质量管理工作无纸化、流程化、标准化

质量管理是实验室日常管理工作中的重点内容,目前大多数实验室信息化的方向还是以实验主流程向无纸化转变为主,质量管理工作仍然依靠线下纸质文件或者线上登记台账的方式进行,这种方式存在任务流转效率低、资源浪费等问题,此外历史数据难以保存也是实验室管理人员的一大痛点。 …

【Android】Room数据库的简单使用方法

Room数据库的使用方法 目录 1、添加Room数据库的依赖2、Entity——定义实体类 2.1 定义主键——PrimaryKey2.2 字段注解——ColumnInfo 3、Dao——定义数据访问对象4、Database——数据库 4.1 通过回调观察数据库是否创建成功 5、使用时注意点6、编写异步 DAO 查询 6.1 写异步…

24_Scala集合Map

文章目录 Scala集合Map1.构建Map2.增删改查3.Map的get操作细节 Scala集合Map –默认immutable –概念和Java一致 1.构建Map –创建kv键值对 && kv键值对的表达 –创建immutable map –创建mutable map //1.1 构建一个kv键值对 val kv "a" -> 1 print…

Java IO流(二)

1. 缓冲流 1.1 字节缓冲流概述 当对文件或其他数据源进行频繁的读/写操作时&#xff0c;效率比较低&#xff0c;这时如果使用缓存流就能够更高效地读/写信息。 比如&#xff0c;可以使用缓冲输出流来一次性批量写出若干数据减少写出次数来提高写出效率。 如果用生活中的例子做…

多模态EDA论文小记

论文地址 该论文主要改进点是&#xff1a;通过动态化局部搜索中每个集群大小&#xff0c;高斯和柯西分布共同产生个体。总的来说改进点不多&#xff0c;当然也可能是笔者还没发现。 局部搜索 划分集群 划分集群有两个策略分别是&#xff1a; 随机生成一个点作为中心点&…
最新文章