Java 中 private 修飾符和 public 修飾符之間的區別

Rupam Yadav 2023年1月30日 2022年5月1日
  1. Java 中帶有 public 修飾符的方法
  2. Java 中帶有 public 修飾符的變數
  3. Java 中帶有 public 修飾符的建構函式
  4. Java 中帶有 private 修飾符的方法
  5. Java 中帶有 private 修飾符的變數
  6. Java 中帶有 private 修飾符的建構函式
Java 中 private 修飾符和 public 修飾符之間的區別

今天,我們將通過一些示例來更好地理解兩個訪問修飾符 privatepublic 之間的顯著差異。

Java 中帶有 public 修飾符的方法

當我們在方法中使用關鍵字 public 時,其範圍擴充套件到整個程式,這意味著該方法也可以被同一專案中其他包中的任何類和函式訪問。

為了演示這個場景,我們建立了三個類。ExampleClass1ExampleClass2 這兩個類在同一個名為 com.tutorial 的包中,而第三個類 ExampleClass3 在另一個名為 com.tutorial.javcaTutorial 的包中。

ExampleClass1 類中,我們建立了一個帶有 public 關鍵字的方法 exampleFunc(),其中包含一個 print 語句。接下來,我們通過建立一個 ExampleClass1 類物件在 ExampleClass2 類中呼叫此函式。

我們還從另一個包中的 ExampleClass3 呼叫 exampleFunc() 函式。整個程式執行沒有任何錯誤,這意味著所有這些類都可以訪問 public 方法。

package com.tutorial;

public class ExampleClass1 {
    public void exampleFunc() {
        System.out.println("exampleFunc() called");
    }
}
package com.tutorial;

public class ExampleClass2 {
    public static void main(String[] args) {
        new ExampleClass1().exampleFunc();
    }
}
package com.tutorial.javaTutorial;

import com.tutorial.ExampleClass1;

public class ExampleClass3 {
    public static void main(String[] args) {
        new ExampleClass1().exampleFunc();
    }
}

輸出:

exampleFunc() called

Java 中帶有 public 修飾符的變數

可以從程式中的任何位置訪問公共變數。如下例所示,我們可以通過建立另一個類的物件來訪問 showMsg 變數。

public class ExampleClass1 {
    public String showMsg = "This is a public variable";
}

class ExampleCLass extends ExampleClass1 {

    public static void main(String[] args) {
        System.out.println(new ExampleCLass().showMsg);
    }
}

輸出:

This is a public variable

Java 中帶有 public 修飾符的建構函式

建構函式也可以像方法和變數一樣被設為 publicprivate。如果它是 public,我們可以像在這段程式碼中那樣在任何地方建立該類的物件。

package com.tutorial;

public class ExampleClass1 {
    public String showMsg;

    public ExampleClass1(){
       showMsg = "Inside a constructor";
    }
}

class ExampleCLass extends ExampleClass1 {

    public static void main(String[] args) {
        System.out.println(new ExampleCLass().showMsg);
    }
}

輸出:

Inside a constructor

Java 中帶有 private 修飾符的方法

public 訪問修飾符不同,private 修飾符通過使超出範圍的類無法訪問其成員來限制其成員。

就像我們在上一節中所做的那樣,我們建立了三個類並嘗試從這兩個類中呼叫一個函式。但是我們使用了 private 修飾符而不是 public,並且在執行程式時出現錯誤。

發生這種情況是因為 private 修飾符只允許在宣告它們的類中訪問其成員。

package com.tutorial;

public class ExampleClass1 {
    private void exampleFunc() {
        System.out.println("exampleFunc() called");
    }
}
package com.tutorial;

public class ExampleClass2 {
    public static void main(String[] args) {
        new ExampleClass1().exampleFunc();
    }
}
package com.tutorial.javaTutorial;

import com.tutorial.ExampleClass1;

public class ExampleClass3 {
    public static void main(String[] args) {
        new ExampleClass1().exampleFunc();
    }
}

輸出:

java: exampleFunc() has private access in com.tutorial.ExampleClass1

Java 中帶有 private 修飾符的變數

即使變數在父類中,我們也無法從另一個類訪問私有變數。在以下示例中顯示,當從 ExampleCLass 訪問時,它會引發錯誤。

public class ExampleClass1 {
    private String showMsg = "This is a public variable";

}

class ExampleCLass extends ExampleClass1 {

    public static void main(String[] args) {
        System.out.println(new ExampleCLass().showMsg);
    }
}

輸出:

java: showMsg has private access in com.tutorial.ExampleClass1

Java 中帶有 private 修飾符的建構函式

private 關鍵字一起使用的建構函式會限制我們建立類的物件,因為建立物件需要建構函式。我們不能擴充套件該類,因為它的建構函式對子類不可用。

程式碼有兩個類,ExampleClass1 包含一個在類建構函式中初始化的變數。我們將此建構函式設為私有。

當我們在 ExampleCLass 中擴充套件 ExampleClass1 時,我們收到一條錯誤訊息,指出 ExampleCLass1() 具有 private 訪問許可權,因為它的建構函式是私有的。

package com.tutorial;

public class ExampleClass1 {
    public String showMsg;

    private ExampleClass1(){
       showMsg = "Inside a constructor";
    }
}

class ExampleCLass extends ExampleClass1 {

    public static void main(String[] args) {
        System.out.println(new ExampleCLass().showMsg);
    }
}

輸出:

java: ExampleClass1() has private access in com.tutorial.ExampleClass1
Author: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相關文章 - Java Modifier