java中在類的內部定義接口有什麼好處?

天道酬勤170946349

我始終認為把一個編程問題搞複雜了比較容易,把一個編程問題講的簡單明瞭是比較困難的事情。而Java中的內部接口就是一個這樣的問題,用的不多,但是某些情況下還有使用場景。

在描述內部接口的應用之前,先說明一件事情,那就是開發中不使用內部接口是完全可以的。甚至很多公司是不允許使用內部接口的,這種做法雖然有些極端但是也是保證代碼質量的一種頗為有效的方式。

要理解Java類中定義的內部接口有什麼實際價值,要從三個角度來理解:首先要清楚內部類定義的初衷,其次要清楚接口的作用,最後再看內部接口能解決什麼問題。

我們先來看一下內部類在java中的定義:

要描述內部接口首先要描述內部類,因為這兩個概念是分不開的。關於內部類,Java的定義中清楚的指明瞭為了邏輯整合,什麼是邏輯整合呢?簡單的理解就是一組邏輯耦合度非常高的類,最常見的應用就是圖形界面和其對應的事件處理。還有一點,就是內部類的可複用性較小,使用範圍嚴重依賴於固定場景。

那麼內部接口的定義是什麼呢?Java中關於內部接口的定義只有一句話:An inner class can act as an interface implemented by another inner class。這句話的定義清晰明瞭的指明瞭內部接口是服務於內部類的。看一個例子:

可以說內部接口與內部類在定義之初就是為了提高程序的高度封裝而設計的,而內部接口則是為了給內部類提供服務的,除了可以定義內部接口還可以定義內部抽象類,此時還可以定義另外一個內部實體類實現此內部抽象類,看一個例子:

這個例子只是在內部接口的例子基礎上稍加改動,這個例子的目的不僅僅是為了闡述內部抽象類的定義,更為了佐證內部接口的作用。因為我們通常把接口理解為全抽象,把抽象類理解為半抽象。

當然,內部接口與內部類還是有一個根本上的區別:類是實現,接口是標準。如果把接口限制在一個固定的範圍內使用未免有點大材小用了,所以內部接口天然具備static屬性,是可以在外部直接使用的,看一個例子:

這個例子的使用在效果上依然體現在高度封裝上,簡單的說就是通過一個專屬的接口完成抽象(Education)和實現類(MiddleSchool、HighSchool)的連接。


IT人劉俊明

1. 從作用上來講:

類的內部接口和外部接口,都是啟到接口的作用,接口就是來定義規範。

2. 內部定義接口的好處:

1)具體可以理解成一個類中進一步的邏輯細分, 比如JDK接口Map中的內部接口Entry;

代碼如下:

2)可以增強代碼的易讀性和可維護性;

3. 從定義的出發點來講:

我感覺內部接口更多的是針對類的內部使用,但是,在類的外部一般是說對外的公有接口,可以為更多的服務提供接口功能。

現將已經發布部分文章羅列一部分:

Java:線程併發問題、基於代碼實戰的4種鎖機制及多線程協作編程

Java網絡編程:TCP和UDP通信模型詳解及基於代碼實戰的通信編程

Servlet:多個過濾器並存及代碼實戰、web.xml的7種典型節點配置

京東和騰訊精選12道Java筆試題並有答案

精選11道Java技術面試題並有答案(包含部分阿里和華為的面試題)


互聯網IT信息

內部接口也稱為嵌套接口,即在一個接口內部定義另一個接口。舉個例子,Entry接口定義在Map接口裡面,如下代碼:
public interface Map {
interface Entry{
int getKey();\n
}
void clear();
}
使用內部接口的原因:
  • 一種對那些在同一個地方使用的接口進行邏輯上分組;
  • 封裝思想的體現;
  • 嵌套接口可以增強代碼的易讀性和可維護性;
在Java標準庫中使用內部接口的一個例子是java.util.Map和Java.util.Map.Entry。這裡java.util.Map同樣被當成命名空間使用。Entry並不屬於全局作用域範圍.


分享到:


相關文章: