自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談為什么Java接口中不允許定義變量

開發(fā) 后端
大家都知道,Java 中接口里定義的成員變量都自動(dòng)是 final static 的,為什么?這樣有什么好處?為什么不能定義變量?這里為大家簡(jiǎn)單說說。

接口就是提供一種統(tǒng)一的”協(xié)議”,而接口中的屬性也屬于“協(xié)議”中的成員。它們是公共的,靜態(tài)的,最終的常量。相當(dāng)于全局常量。抽象類是不“完全”的類,相當(dāng)于是接口和具體類的一個(gè)中間層。即滿足接口的抽象,也滿足具體的實(shí)現(xiàn)。

如果接口可以定義變量,但是接口中的方法又都是抽象的,在接口中無法通過行為來修改屬性。有的人會(huì)說了,沒有關(guān)系,可以通過實(shí)現(xiàn)接口的對(duì)象的行為來修改接口中的屬性。這當(dāng)然沒有問題,但是考慮這樣的情況。如果接口 A 中有一個(gè)public 訪問權(quán)限的靜態(tài)變量 a。按照 Java 的語義,我們可以不通過實(shí)現(xiàn)接口的對(duì)象來訪問變量 a,通過 A.a = xxx; 就可以改變接口中的變量 a 的值了。正如抽象類中是可以這樣做的,那么實(shí)現(xiàn)接口 A 的所有對(duì)象也都會(huì)自動(dòng)擁有這一改變后的 a 的值了,也就是說一個(gè)地方改變了 a,所有這些對(duì)象中 a 的值也都跟著變了。這和抽象類有什么區(qū)別呢,怎么體現(xiàn)接口更高的抽象級(jí)別呢,怎么體現(xiàn)接口提供的統(tǒng)一的協(xié)議呢,那還要接口這種抽象來做什么呢?所以接口中不能出現(xiàn)變量,如果有變量,就和接口提供的統(tǒng)一的抽象這種思想是抵觸的。所以接口中的屬性必然是常量,只能讀不能改,這樣才能為實(shí)現(xiàn)接口的對(duì)象提供一個(gè)統(tǒng)一的屬性。

通俗的講,你認(rèn)為是要變化的東西,就放在你自己的實(shí)現(xiàn)中,不能放在接口中去,接口只是對(duì)一類事物的屬性和行為更高層次的抽象。對(duì)修改關(guān)閉,對(duì)擴(kuò)展(不同的實(shí)現(xiàn) implements)開放,接口是對(duì)開閉原則的一種體現(xiàn)。

【編輯推薦】

  1. Java語言入門初學(xué)者不得不看的幾條建議
  2. Java項(xiàng)目開發(fā)筆記與開發(fā)過程中的問題總結(jié)
  3. Java EE 6遙遙無期 預(yù)覽版兩極分化
  4. 幾種典型的Java內(nèi)存泄漏
  5. Java內(nèi)存溢出的詳細(xì)解決方案
責(zé)任編輯:彭凡 來源: javaeye博客
相關(guān)推薦

2023-08-22 20:43:09

HashMap單線程null

2022-05-08 18:18:40

JDKValueHashMap

2022-01-27 07:02:52

JavaHashMap單線程

2024-09-03 09:45:36

2021-08-23 12:54:12

開發(fā)技能代碼

2015-08-17 10:16:00

CentOSDocker命令root

2010-11-11 16:53:28

SQL Server視

2014-06-30 14:53:49

Android定制google

2020-08-20 11:12:14

iOS 13.6蘋果降級(jí)

2011-04-22 10:15:56

Novell專利

2010-06-01 16:12:00

2011-03-01 14:12:12

FreebsdProftpd

2010-11-02 15:08:40

設(shè)置db2主鍵

2010-05-20 13:03:52

IIS父路徑

2009-09-22 15:54:42

CCIE筆試

2012-01-04 21:24:13

Android 4.0

2023-05-23 08:54:43

SRESLO運(yùn)營(yíng)

2018-06-13 10:08:05

蘋果數(shù)據(jù)開發(fā)者

2021-02-16 00:25:45

比特幣貨幣加密貨幣

2023-02-01 14:47:00

模型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)