Java 中的公共、受保護、包和私有訪問修飾符
Java 提供了不同級別的保護,允許精確控制類、子類和包中成員變數和方法的可訪問性。訪問控制機制藉助於訪問修飾符(如 public、protected、private 和 package)來實現。它們定義了變數、類和方法的作用域。我們將瞭解 Java 中的各種訪問修飾符。
Java 中的訪問修飾符
公共訪問修飾符
Java 不會限制公共成員的可訪問性。任何宣告為 public 的內容都可以在任何地方訪問,這意味著我們可以在類內部和外部訪問它們,以及在包內和外部訪問它們。您可能已經注意到,Java 中的 main() 方法始終定義為 public,以便存在於當前程式任何作用域之外的 JVM 可以呼叫它。
公共訪問修飾符的一些示例:
public int i1 = 108; public double d2 = 6.55;
這裡,變數被宣告為 public。
私有訪問修飾符
當我們將類成員宣告為 private 時,它將無法被其類外部的任何程式碼訪問,包括其子類。透過使用 private 關鍵字,我們可以實現更高層次的封裝。
私有訪問修飾符的一些示例:
private int mobNo = 982266; private double income = 35005.55;
這裡,變數被宣告為 private。
受保護訪問修飾符
它主要用於繼承的情況下,以控制父類成員和相應子類成員的訪問。它允許在當前包之外訪問元素,但僅限於類的直接子類。這裡,包是包含一組類的容器。
受保護訪問修飾符的一些示例:
protected int data1 = 5; protected double data2 = 5.55;
這裡,變數被宣告為 protected。
包訪問修飾符
它也稱為預設訪問修飾符。當我們沒有顯式地為類和方法指定任何訪問說明符時,Java 編譯器會自動將其視為預設或包成員。我們可以在同一個包中的子類以及其他類內部訪問這些成員。
包訪問修飾符的一些示例:
int i1 = 108; double d2 = 6.55;
這裡,變數被宣告為 default 或 package。
公共、受保護、包和私有訪問修飾符
從以上討論中,我們可以得出以下關於這些訪問修飾符之間差異的結論:
可訪問區域 |
公共 |
受保護 |
包 |
私有 |
---|---|---|---|---|
在同一類中 |
是 |
是 |
是 |
是 |
在同一包的子類中 |
是 |
是 |
是 |
否 |
在同一包的非子類中 |
是 |
是 |
是 |
否 |
其他包的子類 |
是 |
是 |
否 |
否 |
其他包的非子類 |
是 |
否 |
否 |
否 |
在上表中,“是”表示具有指定訪問修飾符的成員可訪問給定區域,“否”表示不可訪問。
示例 1
以下示例說明了在 Java 中使用 public、protected 和 package 修飾符。
class Pack { protected void prnt1() { // method declared as protected String msg1 = "I am accessing a protected method"; System.out.println(msg1); } public void prnt2() { // method declared as public String msg2 = "I am inside a public method"; System.out.println(msg2); } void prnt3() { // method declared as default String msg3 = "I am inside a default method"; System.out.println(msg3); } } public class ClassShow extends Pack { public static void main(String args[]) { // object of sub class ClassShow obj = new ClassShow(); // method calling through object of sub class obj.prnt1(); obj.prnt2(); obj.prnt3(); } }
輸出
I am accessing a protected method I am inside a public method I am inside a default method
示例 2
以下示例說明了如果我們在 Java 中將方法宣告為 private 會發生什麼。
class Pack { private void prnt() { // declaring a method private String msg = "I am inside a private method"; System.out.print(msg); } } public class ClassShow extends Pack { public static void main(String args[]) { // object of child class ClassShow obj = new ClassShow(); // method calling through object of child class obj.prnt(); } }
輸出
ClassShow.java:13: error: cannot find symbol obj.prnt(); ^ symbol: method prnt() location: variable obj of type ClassShow 1 error
這裡我們修改了前面示例的程式碼,我們得到了一個編譯時錯誤,因為我們試圖在子類中訪問一個私有方法。
結論
訪問修飾符決定了如何訪問類的成員或方法。它們在宣告時附加到成員上。在本文中,我們詳細解釋了所有訪問修飾符,並分別提供了示例,還討論了它們之間的一些差異。