[英]Child Class cannot be protected
import java.util.*;
public class NewTreeSet2{
void count(){
for (int x=0; x<7; x++,x++){
System.out.print(" " + x);
}
}
}
protected class NewTreeSet extends NewTreeSet2{
public static void main(String [] args){
NewTreeSet2 t = new NewTreeSet2();
t.count();
}
}
在這里,我不能將NewTreeSet子類保護為受保護。 為什么是這樣? 我不想做任何事情,這只是為了理解訪問說明符。
public
是唯一可以顯式應用於Java頂級class
access-modifier。 類的情況下的protected
修飾符只能應用於內部類。
Java語言規范的8.1.1節說明了這一點:
訪問修飾符protected和private僅適用於直接封閉類聲明中的成員類
那么為什么不能將頂級課程標記為protected
? Java
中protected
訪問修飾符的目的是添加對類成員的訪問的限制。 由於頂級類不是任何類的成員,因此protected
訪問修飾符對於頂級類沒有意義。 內部類可以標記為protected
因為它們確實是類的成員。 同樣的規則也適用於private
。
類定義本身只能是public或package-private 。 必須在自己的文件中定義公共類,文件名必須是類名。
該文檔沒有說明為什么頂層只有兩個訪問修飾符,但有人可能會說它是合乎邏輯的:
protected
訪問修飾符確保只有相同或子類的實例才能訪問該主題。 多態性不適用於類,僅適用於類的實例。 因此protected
關鍵字沒有意義。 如果要保護對象的構造 ,則應為構造函數指定訪問修飾符。
“為什么我們不能為頂級類提供'protected'修飾符”。
假設允許對類使用protected modifier。 然后會發生什么,它將在同一個包中的所有類中可見,這與默認(包級)訪問類將具有的行為相同。 此外,這個“受保護”類也應該對包外的所有子類可見。 但遺憾的是,您無法在包外創建此類的任何子類,因為此類本身在包外不可見。 因此,如果沒有子類特定的行為,這個“受保護”類將與包級別或默認訪問類完全相同。 因此,對於類,絕對不需要'protected'修飾符,因此也是不允許的。
---這是由B Verma在另一個論壇發布的,根據你們所有人的說法找到了這個答案。 這真的很有幫助,謝謝。
http://www.coderanch.com/t/585021/java/java/Protected-access-modifier-class-level
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.