java中在类的内部定义接口有什么好处吗

我始终认为把一个编程问题搞复杂了比较容易,把一个编程问题讲的简单明了是比较困难的事情。而Java中的内部接口就是一个这样的问题,用的不多,但是某些情况下还有使用场景。

在描述内部接口的应用之前,先说明一件事情,那就是开发中不使用内部接口是完全可以的。甚至很多公司是不允许使用内部接口的,这种做法虽然有些极端但是也是保证代码质量的一种颇为有效的方式。

要理解Java类中定义的内部接口有什么实际价值,要从三个角度来理解:首先要清楚内部类定义的初衷,其次要清楚接口的作用,最后再看内部接口能解决什么问题。

我们先来看一下内部类在java中的定义:java中在类的内部定义接口有什么好处吗图1

要描述内部接口首先要描述内部类,因为这两个概念是分不开的。关于内部类,Java的定义中清楚的指明了为了逻辑整合,什么是逻辑整合呢?简单的理解就是一组逻辑耦合度非常高的类,最常见的应用就是图形界面和其对应的事件处理。还有一点,就是内部类的可复用性较小,使用范围严重依赖于固定场景。

那么内部接口的定义是什么呢?Java中关于内部接口的定义只有一句话:An inner class can act as an interface implemented by another inner class。这句话的定义清晰明了的指明了内部接口是服务于内部类的。看一个例子:java中在类的内部定义接口有什么好处吗图2

可以说内部接口与内部类在定义之初就是为了提高程序的高度封装而设计的,而内部接口则是为了给内部类提供服务的,除了可以定义内部接口还可以定义内部抽象类,此时还可以定义另外一个内部实体类实现此内部抽象类,看一个例子:java中在类的内部定义接口有什么好处吗图3

这个例子只是在内部接口的例子基础上稍加改动,这个例子的目的不仅仅是为了阐述内部抽象类的定义,更为了佐证内部接口的作用。因为我们通常把接口理解为全抽象,把抽象类理解为半抽象。

当然,内部接口与内部类还是有一个根本上的区别:类是实现,接口是标准。如果把接口限制在一个固定的范围内使用未免有点大材小用了,所以内部接口天然具备static属性,是可以在外部直接使用的,看一个例子:java中在类的内部定义接口有什么好处吗图4java中在类的内部定义接口有什么好处吗图5java中在类的内部定义接口有什么好处吗图6

这个例子的使用在效果上依然体现在高度封装上,简单的说就是通过一个专属的接口完成抽象(Education)和实现类(MiddleSchool、HighSchool)的连接。

内部接口也称为嵌套接口,即在一个接口内部定义另一个接口。举个例子,Entry接口定义在Map接口里面,如下代码:
public interface Map {
interface Entry{
int getKey();

}
void clear();
}
使用内部接口的原因:

  • 一种对那些在同一个地方使用的接口进行逻辑上分组;
  • 封装思想的体现;
  • 嵌套接口可以增强代码的易读性和可维护性;

在Java标准库中使用内部接口的一个例子是java.util.Map和Java.util.Map.Entry。这里java.util.Map同样被当成命名空间使用。Entry并不属于全局作用域范围.

本文来自投稿,不代表天一生活立场,如若转载,请注明出处:http://tiyigo.com/it/22335.html

(0)
上一篇 2023-04-02 13:31
下一篇 2023-04-02 13:59

相关推荐