接口為什么只能有常量不能有變量?
背景:接口中只有常量,不能存在變量
代碼:
public?interface?A{ ????int?i=10; ????void?f(); ????}
問題:以上代碼中i默認是public static final。請問一下實現接口的過程中,是否與繼承一樣是在本對象的堆空間中開辟一塊給父類實例域存放值,如果是這樣子的話我認為接口中是可以存在變量的。接口規定方法名不規定實現,引申就是規定變量名不規定具體值,這樣思考不對嗎?
PS:請回答大神不要用現狀/規定來反推一定要是這樣,在下還是想好好理解一下OOP的設計思路,感謝
2019-10-05
為什么抽象類可以有變量?
2017-09-21
咦,自己查資料發現原因如下:
首先接口由于少了方法的實現,所以不能實例化,這個與抽象類一致,
由于不能實例化,所以對于成員變量只能是static
由于是static所以所有實現了接口的類共享一份
由于所有人共享一份,同時接口的定義是“所有實現該接口的人都共同擁有這些屬性/功能”
由于所有的實現類都共同擁有,若是變量則實現類A的改變會導致實現B的改變
會由于實現類的操作而改變的東西違反了接口的定義
所以為了確保每個實現的接口都共同遵守這個“屬性”,屬性必須是final
由于接口本身的定義是public
最后就是 public static final xxx
2017-09-21
甲魚的臀部——龜腚