閱讀652 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java中接口定義成員變量

在interface裏麵的變量都是public static final的。可以這樣寫:public static final int i=10或者int i=10。
public interface MyInterface
{
 // 默認為public static int a = 10;
 int a = 10;
}
public class MyTest
{
 public static void main(String[] args)
 {
  int a = MyInterface.a;
  System.out.println(a);
 }
}
        首先要弄清接口的含義,接口就是提供一種統一的“協議”,而接口中的屬性也屬於“協議”中的成員,它們是公共的、靜態的、最終的常量,相當於全局常量。抽象類是不完全的類,相當於是接口和具體類的一個中間層。即滿足接口的抽象,也滿足具體的實現。
        如果接口可以定義變量,但是接口中的方法又都是抽象的,在接口中無法通過行為來修改屬性。有的人會說沒關係,可以通過實現接口的對象的行為來修改接口中的屬性。這當然沒有問題,但是考慮這樣的情況。如果接口A中有一個public訪問權限的靜態變量a。按照Java的語義,我們可以不通過實現接口的對象來訪問變量a,通過A.a = xxx;就可以改變接口中的變量a的值了。正如抽象類中是可以這樣做的,那麼實現接口A的所有對象也都會自動擁有這一改變後的a的值了,也就是說一個地方改變了a,所有這些對象中a的值也都跟著變了。這和抽象類有什麼區別呢,怎麼體現接口更高的抽象級別呢,怎麼體現接口提供的統一的協議呢,那還要接口這種抽象來做什麼呢?所以接口中不能出現變量,如果有變量,就和接口提供的統一的抽象這種思想是抵觸的。所以接口中的屬性必然是常量,隻能讀不能改,這樣才能為實現接口的對象提供一個統一的屬性。
        通俗的講,要變化的東西,就放在自己的實現中,不能放在接口中去,接口隻是對一類事物的屬性和行為更高層次的抽象。對修改關閉,對擴展(不同的實現implements)開放,接口是對開閉原則的一種體現。

原帖地址:https://hi.baidu.com/xuehenfeng/item/316f801314059ff365eabf82

最後更新:2017-04-04 07:33:13

  上一篇:go C# WinForm多線程開發(三) Control.Invoke
  下一篇:go 開源項目Universal Image Loader for Android