簡體   English   中英

公共班級需要公共成員(訪問成員時)?

[英]Public class requires public members (when accessing members)?

我在Java書中有關包和private修飾符的部分中注意到,該代碼在類上冗余使用private ,並且在包外部訪問該類的成員。

package bookpack;

public class Book {
    private String title;
    private String author;
    private int pubDate;

    public Book(String t, String a, int d) {
        title = t;
        author = a;
        pubDate = d;
    }

    public void show() {
        System.out.println(title);
        System.out.println(author);
        System.out.println(pubDate + "\n"); 
    }
}

當我從show()刪除public ,Eclipse給出一個錯誤,指出無法訪問該成員(嘗試從另一個軟件包進行訪問時)。 我了解這是因為它不是public ,因此無法從包外部訪問。 但是,由於該類是公開的,所以我認為,除非另外指定,否則該類的所有成員都將是public 這將遵循類似於繼承的“此處為一般規格,稍后為特定規格”樣式。 就像您無法從靜態方法調用動態對象一樣。 那么,為什么公共類的成員需要public標簽? public標簽如何在檢索類的公共成員的上下文中影響可訪問性

從評論部分展開

訪問修飾符僅適用於它們直接修改的事物。 因此, public對一類只影響類的可見性- 沒有任何成員的可見性。 因此,可以為package-private類提供public成員,如果您有一個要從公共API中隱藏的抽象類,這可能會很有用。

另外,已經定義了缺少可見性修飾符以表示程序包私有的可見性。 因此,它不能用來表示“與類相同”。 至於為什么以這種方式設計語言,我能想到的最好的辦法是,在限制對外界的可見性與同時允許不同的頂級類進行交互之間,這似乎是一個很好的平衡。

正如評論中指出的

訪問級別修飾符確定其他類是否可以使用特定字段或調用特定方法。 訪問控制分為兩個級別:

  • 在頂層-公共或程序包私有(無顯式修飾符)。
  • 在成員級別-公共,私有,受保護或整包私有(無顯式修飾符)。

可以使用修飾符public聲明一個類,在這種情況下,該類對於所有地方的所有類都是可見的。 如果一個類沒有修飾符(默認值,也稱為package-private),則它僅在其自己的包中可見(包被命名為相關類的組,您將在以后的課程中對其進行了解。)

在成員級別,您也可以像頂級類一樣使用public修飾符或no修飾符(package-private)(具有相同含義)。 對於成員,還有兩個附加的訪問修飾符:私有和保護。 private修飾符指定只能在其自己的類中訪問該成員。 protected修飾符指定成員只能在其自己的程序包中(與package-private一樣)訪問,並且只能由其在另一個程序包中的類的子類訪問。

有關更多詳細信息,請通過以下鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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