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

這裡我們修改了前面示例的程式碼,我們得到了一個編譯時錯誤,因為我們試圖在子類中訪問一個私有方法。

結論

訪問修飾符決定了如何訪問類的成員或方法。它們在宣告時附加到成員上。在本文中,我們詳細解釋了所有訪問修飾符,並分別提供了示例,還討論了它們之間的一些差異。

更新於: 2023年5月16日

460 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告