在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)開放,接口是對開閉原則的一種展現。
原帖位址:http://hi.baidu.com/xuehenfeng/item/316f801314059ff365eabf82