百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

「接口」Java 接口是什么以及如何使用

lipiwang 2024-11-21 17:42 4 浏览 0 评论

接口简概

接口概念:在 Java 程序设计语言中, 接口不是类,而是对类的一组需求描述,这些类要遵从接口描 述的统一格式进行定义 。

接口中的所有方法自动地属于 public 。 因此,在接口中声明方法时,不必提供关键字 public。

在接口中可以定义常量。然而,更为重要的是要知道接口不能提供哪些功能。接口绝不能含有实例域

在JavaSE 8时,可以在接口中提供简单方法了。当然, 这些方法不能引用实例域——接口没有实例。

提供实例域和方法实现的任务应该由实现接口的那个类来完成。因此,可以将接口看成是没有实例域的抽象类,但是这两个概念还是有一定区别的。

要将类声明为实现某个接口, 需要使用关键字 implements。 为了让类实现一个接口, 通常需要下面两个步骤: 1 ) 将类声明为实现给定的接口。 2 ) 对接口中的所有方法进行定义。

在接口声明中,不需要将方法声明为 public , 这是因为在接口中的所有方法都自动地是 public 。不过,在实现接口时, 必须把方法声明为 public

接口的特性

接口不是类,尤其不能使用 new运算符实例化一个接口

尽管不能构造接口的对象,却能声明接口的变量

Comparable x ; // OK

接口变量必须引用实现了接口的类对象

x = new Employee (. . .); // OK

如同使用 instanceof检查一个对象是否属于某个特定类一样, 也可以使用 instanceof 检查一个对象是否实现了某个特定的接口。

if (anObject instanceof Comparable) { . . . }

与可以建立类的继承关系一样,接口也可以被扩展,使用关键字 extends。这里允许存在多条从具有较高通用性的接口到较高专用性的接口的链。

接口中的方法都自动地被设置为 public —样,接口中的域将被自动设为 public static final。

可以将接口方法标记为 public, 将域标记为 public static final。有些程序员出于习惯或提高清晰度的考虑,愿意这样做。但 Java 语言规范却建议不要书写这些多余的关键字

每个类只能够拥有一个超类, 但却可以实现多个接口。这为定义类的行为提供了极大的灵活性。

静态方法

在 Java SE 8 中,允许在接口中增加静态方法。理论上讲,没有任何理由认为这是不合法的。只是这有违于将接口作为抽象规范的初衷

目前为止, 通常的做法都是将静态方法放在伴随类中。在标准库中, 你会看到成对出现的接口和实用工具类, 如 Collection/Collections 或 Path/Paths

在Java SE 8 中, 可以为 Path 接口增加静态方法,这样一来, Paths 类就不再是必要的了。 不过整个 Java 库都以这种方式重构也是不太可能的, 但是实现你自己的接口时,不再需要为实用工具方法另外提供一个伴随类

默认方法

在 Java SE 8 中,可以为接口方法提供一个默认实现。 必须用 default 修饰符标记这样一个方法

有些情况下, 默认方法可能很有用。例如,只对接口中的某几个方法感兴趣,而不是全部。

默认方法可以调用任何其他方法。

在 JavaAPI 中,你会看到很多接口都有相应的伴随类,这个伴随类中实现了相应接口 的部分或所有方法,如 Collection/AbstractCollection 或 MouseListener/MouseAdapter。在 JavaSE 8 中, 这个技术已经过时。现在可以直接在接口中实现方法。

默认方法的一个重要作用是“‘ 接口演化” (interface evolution)。 对于一些老版本的接口,如果要在上面增添新功能时,默认方法就不失为一个好的选择,因为默认方法不会对以前的接口实现产生影响。为接口增加一个非默认方法不能保证“源代码兼容”(source compatible)

解决默认方法冲突

如果先在一个接口中将一个方法定义为默认方法, 然后又在超类或另一个接口中定义了 同样的方法, 会发生什么情况? Java 的规则要简单得多。

  1. 超类优先。如果超类提供了一个具体方法,同名而且有相同参数类型的默认方法会被忽略。“ 类优先” 规则可以确保与 Java SE 7 的兼容性。如果为一个接口增加默认方法,这对于 有这个默认方法之前能正常工作的代码不会有任何影响。
  2. 接口冲突。 如果一个超接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同的方法, 必须覆盖这个方法来解决冲突。
    • 当一个类要实现的接口中有多个相同的默认方法时,并不是从中选择一个,Java 编译器会报告一个错误,让程序员来解决这个二义性
    • 当一个类要实现的接口中有多个相同的方法时,如果至少有一个接口提供了一个实现,编译器就会报告错误, 而程序员就必须解决这个二义性。Java 设计者更强调一致性。两个接口如何冲突并不重要。
    • 如果两个接口都没有为共享方法提供默认实现, 那么就与 Java SE 8之前的 情况一样,这里不存在冲突。 实现类可以有两个选择:实现这个方法,或者干脆不实现。 如果是后一种情况,这个类本身就是抽象的。

千万不要让一个默认方法重新定义 Object 类中的某个方法。例如,不能为 toString 或 equals 定义默认方法, 尽管对于 List 之类的接口这可能很有吸引力, 由于“ 类优先” 规则, 这样的方法绝对无法超越 Object.toString 或 Objects.equals

相关推荐

Java 实体映射工具 MapStruct(jpa实体类映射类)

简介:让你的DO(业务实体对象),DTO(数据传输对象)数据转换更简单强大前言在软件架构中,分层式结构是最常见,各层之间有其独立且隔离的业务逻辑,也因而各层有自己的输入输出对象,也就是代码中见到各...

@Date不管用怎么办,想少写get和setter方法,怎么办

学习交流群:293911833,有遇到问题的,可以加一下群,大家互相交流,一起进步今天在使用lombok的时候,为什么@Date不管用,是我映射没做好吗?还是其他的,后来查了一些大佬的资料终于找到问...

Spring系列之集成MongoDB的2种方法

MongoDB是最流行的NoSQL数据库,SpringBoot是使用Spring的最佳实践。今天带大家讲一讲SpringBoot集成MongoDB的两种方式,MongoDB的安装自行去官网查询,本地开...

Spring Boot集成SLF4j详解(springboot集成knife4j)

SpringBoot集成SLF4j详解:从基础到高级实践SLF4j(SimpleLoggingFacadeforJava)是一个日志门面框架,提供统一的日志接口,允许开发者灵活切换底层...

自定义代码生成器(上)(代码自动生成器)

1概述1.1介绍在项目开发过程中,有很多业务模块的代码是具有一定规律性的,例如controller控制器、service接口、service实现类、mapper接口、model实体类等等,这部分代...

Java系统开发从入门到精通第四讲(文字版)

课程目标:了解重要的JavaAPI和一些必备框架的使用,这些都是系统开发的标配需要掌握日期时间APIJava8通过发布新的Date-TimeAPI(JSR310)来进一步加强对日期与时间...

重拾JAVA:这种编程语言为什么不行了?

全文共2322字,预计学习时长6分钟为了应对新工作,笔者在过去两周一直在重新熟悉一位老朋友:JAVA。我以JAVA开启了我的软件事业,与之共行了两年半左右的时间。但是随着容器和微服务的出现,JAVA很...

一款提高Java开发效率的工具(java怎么提高技术)

今天来介绍一款Java常用插件:Lombokhttps://projectlombok.org/通常在用Java代码开发项目过程中,都会建立各种各种的Bean类,如下:publicclassSea...

JDK从8升级到21的问题集(jdk1.6升级到1.8要考虑的因素)

一、背景与挑战1.升级动因oOracle长期支持策略o现代特性需求:协程、模式匹配、ZGC等o安全性与性能的需求oAI新技术引入的版本要求2.项目情况o100+项目并行升级的协同作战o多技术栈并存o持...

Lombok:让Java代码变得优雅简洁的秘密武器

Lombok:让Java代码变得优雅简洁的秘密武器在Java的世界里,代码量往往是一个开发者幸福感的重要衡量指标。代码写得越少,出错的可能性就越小,同时维护起来也更轻松。而Lombok正是这样一个让J...

SpringToolSuite(STS)安装lombok插件

一、打开maven仓库,找到lombok所在的文件夹二、在命令行中运行java-jarlombok-1.18.20.jar,打开lombok插件安装的可视化界面。三、选择STS安装目录,点击Ins...

年末将至,Java 开发者必须了解的 15 个Java 顶级开源项目

专注于Java领域优质技术,欢迎关注作者:SnailClimbStar的数量统计于2019-12-29。1.JavaGuideGuide哥大三开始维护的,目前算是纯Java类型项目中Sta...

相见恨晚,一个架构师也不会用的Lombok注解

原创:不羡鸳鸯不羡仙,一行代码调半天。小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。我见过很多反对Lombok的同学,背地里又偷偷的把插件添加了进去,这是真香原理在搞鬼。嘴上说...

第二弹!安排!安利几个让你爽到爆的IDEA必备插件

作者:Guide哥来自:JavaGuide大家好,我是Guide哥。上一篇关于IDEA插件推荐的文章:《第一弹!安排!安利10个让你爽到爆的IDEA必备插件!》收到了很多小伙伴的好评,时隔大半个月...

Java @Data注解(java @order注解)

1、@Data注解是lombok.jar包下的注解,该注解通常用在实体bean上,不需要写出set和get方法,但是具备实体bean所具备的方法,简化编程提高变成速度。2、@Data相当于@Gette...

取消回复欢迎 发表评论: