[英]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.