java為什么不能用protected修飾類?
關于外部類只能用public或默認修飾的說法: 我是這樣理解的:這些修飾權限是針對類中的那些變量、方法、內部類來說的,而外部類已經在最外部(即不存在說在哪個類的內部,或是哪個類的子類這些范圍),類作為單獨文件被加載不能被修飾為私有(private)或受保護的(protected)[下面也解釋了]。只有類內部的那些變量方法去針對訪問權限來討論才有意義。 上述討論權限這樣說才更具意義: public: (類中被修飾為public的所有變量、方法、內部類)對所有類可見。 protected: (類中被修飾為protected的所有變量、方法、內部類)對同一包內的類和所有子類可見。 default(即缺省,什么也不寫): (類中被修飾為default的所有變量、方法、內部類)在同一包內可見。 private: (類中被修飾為private的所有變量、方法、內部類)在同一類內(自身)可見。 即:均是針對類內部的內容來討論的訪問權限所具備的意義。 既然這樣為什么還要對 外部類 或 類 做修飾呢,直接規定只有類內部才能使用訪問權限修飾符不就行了?
1.存在包概念:public 和 default 能區分這個外部類能對不同包作一個劃分 (default修飾的類,其他包中引入不了這個類,public修飾的類才能被import) 這里又有人會說 protected 也包括同包了啊? 1)public 和 default 足夠區分,public就代表公共,不寫就代表default,無需再加個protected累贅 2)protected又包含了不同包子類訪問權限的概念,外部類最外層就是包了,所以對外部類用protected沒意義,包又不具備繼承關系。
2.存在內部類概念:當存在內部類的時候,訪問權限修飾符就變得有意義了。(類也變成成員來嵌套當然也就需要訪問修飾符了)