【Simple Java】Java中的内部接口

什么是内部接口

内部接口也称为嵌套接口,即在一个接口内部定义另一个接口。举个例子,Entry接口定义在Map接口里面,如下代码:

public interface Map {
    interface Entry{
        int getKey();
    }
    void clear();
}

为什么要使用内部接口

如下是一些有一些强有力的理由:

一种对那些在同一个地方使用的接口进行逻辑上分组;

封装思想的体现;

嵌套接口可以增强代码的易读性和可维护性;

在Java标准库中使用内部接口的一个例子是java.util.Map和Java.util.Map.Entry。这里java.util.Map同样被当成命名空间使用。Entry并不属于全局作用域范围,which means there are many other entities that are Entries and are not necessary Map’s entries. This indicates that Entry represents entries related to the Map。

内部类如何工作

为了弄清楚内部接口是如何工作的,我们可以拿它与内部类作比较。内部类可以被认为是一个外部类内部定义的一个常规方法。因为一个方法可以被声明为静态和非静态,类似的内部类也可以被声明为静态和非静态。静态类类似于静态方法,它只能访问外部类的静态成员属性。非静态方法可以访问外部类的所有成员属性。

因为接口是不能实例化的,内部接口只有当它是静态的才有意义。因此,默认情况下,内部接口是静态的,不能你是否手动加了static关键字。

内部接口例子

Map.java

public interface Map {
    interface Entry{
        int getKey();
    }
    void clear();
}

MapImpl.java

public class MapImpl implements Map {
    class ImplEntry implements Map.Entry{
        public int getKey() {
            return 0;
        }
    }
    @Override
    public void clear() {
        //clear
    }
}

译文链接:http://www.programcreek.com/2013/08/inner-interface-in-java/

时间: 2024-11-05 06:31:16

【Simple Java】Java中的内部接口的相关文章

Java集合中的Map接口

jdk1.8.0_144 Map是Java三种集合中的一种位于java.util包中,Map作为一个接口存在定义了这种数据结构的一些基础操作,它的最终实现类有很多:HashMap.TreeMap.SortedMap等等,这些最终的子类大多有一个共同的抽象父类AbstractMap.在AbstractMap中实现了大多数Map实现公共的方法.本文介绍Map接口定义了哪些方法,同时JDK8又新增了哪些. Map翻译为“映射”,它如同字典一样,给定一个key值,就能直接定位value值,它的存储结构为

Java NIO中的Channel接口

Channel  通道,可以将指定文件的部分或全部直接映射成Buffer. 不能直接读写Channel中的数据,Channel只能与ByteBuffer交互. 读数据时,把Channel中的数据映射到ByteBuffer中取出数据使用. 写数据时,把数据放到Buffer中,再把ByteBuffer中的数据写到Channel中. Channel是一个接口,常用的实现类有: FileChannel    用于文件读写 DatagramChannel    用于UDP通信的Channel Server

Java:内部接口

1.什么是内部接口 内部接口也称为嵌套接口,即在一个接口内部定义另一个接口.举个例子,Entry接口定义在Map接口里面,如下代码: public interface Map { interface Entry{ int getKey(); } void clear(); } 2.为什么要使用内部接口 如下是一些强有力的理由: 一种对那些在同一个地方使用的接口进行逻辑上分组: 封装思想的体现: 嵌套接口可以增强代码的易读性和可维护性: 在Java标准库中使用内部接口的一个例子是java.util

java类中定义接口

今天看到一个java类中定义了接口,写个备忘录,记录一下 1 package com.gxf.test; 2 3 public class Test_interface { 4 public interface show{ 5 public void show(); 6 } 7 static class TestInterface implements show{ 8 9 @Override 10 public void show() { 11 System.out.println("this

Java 7中的TransferQueue 以及 SynchronousQueue

Java7中加入了JSR 166y规范对集合类和并发类库的改进.其中的一项是增加了接口TransferQueue和其实现类LinkedTransferQueue. TransferQueue继承了BlockingQueue(BlockingQueue又继承了Queue)并扩展了一些新方法.BlockingQueue(和Queue)是Java 5中加入的接口,它是指这样的一个队列:当生产者向队列添加元素但队列已满时,生产者会被阻塞:当消费者从队列移除元素但队列为空时,消费者会被阻塞. Transf

JAVA 线程中的异常捕获

在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked exception处理掉.这一点是通过java.lang.Runnable.run()方法声明(因为此方法声明上没有throw exception部分)进行了约束.但是线程依然有可能抛出unchecked exception(如运行时异常),当此类异常跑抛出时,线程就会终结,而对于主线程和其他线程完全

Java 8新特性之接口改善(八恶人-1)

Daisy Donergue 多莫歌·黛西 "By woman, you mean her?" 她也能叫女人? Java 8在13年9月发布,写这篇博文的时间已经是17年12月份了.来的有点晚,但是有必要补一下1.8的特性. 一.基本介绍 Java 8中接口里已经完全可以定义静态方法了. 举一个比较普遍的例子就是在java类库中, 对于一些接口如Foo, 都会有一个有静态方法的工具类Foos 来生成或者配合Foo对象实例来使用. 既然静态方法可以存在于接口当中, 那么大多数情况下 Fo

【转】Predicate和Consumer接口– Java 8中java.util.function包下的接口

原文链接 http://ifeve.com/predicate-and-consumer-interface-in-java-util-function-package-in-java-8/ 原文链接 作者:   Mohamed Sanaulla  译者: 李璟([email protected]) 早先我写了一篇<函数式接口>,探讨了部分Java 8中函数式接口的用法.我也提及了Predicate接口属于java.util.function包, 在这篇文章中,我将展示如何应用Predicat

Java 中的函数式接口

概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口. 函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可 以适用于Lambda使用的接口.只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导. 备注:“语法糖”是指使用更加方便,但是原理不变的代码语法.例如在遍历集合时使用的for-each语法,其实 底层的实现原理仍然是迭代器,这便是“语法糖”.从应用层面来讲,Java中的Lambda可以被当做是匿名内