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