簡體   English   中英

兒童班無法受到保護

[英]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 Javaprotected訪問修飾符的目的是添加對類成員的訪問的限制。 由於頂級類不是任何類的成員,因此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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM