1. 程式人生 > >Java教程33—Java 訪問修飾符public、private、protected和default

Java教程33—Java 訪問修飾符public、private、protected和default

在練習java程式時,你必須看過public、private、protected關鍵字,這些被稱為訪問修飾符。
訪問修飾符是對另一個類中的類,建構函式,資料成員和方法的訪問進行一定的限制。
在java中我們有四個訪問修飾符:

  1. default
  2. private
  3. protected
  4. public

1.default訪問修飾符

當我們沒有提到任何訪問修飾符時,它被稱為default訪問修飾符。
此修飾符的範圍僅限於包。
這意味著如果我們在包中有一個具有default訪問修飾符的類,則只有此包中的那些類才能訪問此類。
此程式包外沒有其他類可以訪問此類。
類似地,如果我們在類中有一個預設方法或資料成員,它將在另一個包的類中不可見。

讓我們看一個例子來理解這個:
在這個例子中我們有兩個類,Test類試圖訪問Addition類的預設方法,因為類Test屬於不同的包。
這個程式會丟擲編譯錯誤,因為預設修飾符的範圍僅限於同一個包中宣佈它。
Addition.java

package abcpackage;

public class Addition {
    /* 因為未加限定符
     * 被認為是default.
     */
    int addTwoNumbers(int a, int b){
        return a+b;
    }
}

Test.java

package xyzpackage;

/* 匯入了包但是仍報錯
 * 因為嘗試使用default限定的成員
 */
import abcpackage.*; public class Test { public static void main(String args[]){ Addition obj = new Addition(); /* 將會丟擲異常,因為嘗試使用default方法 */ obj.addTwoNumbers(10, 21); } } Output: Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method addTwoNumbers(int
, int) from the type Addition is not visible at xyzpackage.Test.main(Test.java:12)

2.private訪問修飾符

private修飾符的範圍僅限於類。

私有資料成員和方法只能在類中訪問
類和介面不能宣告為私有
如果一個類有私有建構函式,那麼你就無法從類外部建立該類的物件。
讓我們看一個例子來理解這個:

此示例丟擲編譯錯誤,因為我們嘗試在類Example中訪問類ABC的私有資料成員和方法。
私有資料成員和方法只能在類中訪問:

class ABC{
    private double num = 100;
    private int square(int a){
        return a*a;
    }
}
public class Example{
    public static void main(String args[]){
        ABC obj = new ABC();
        System.out.println(obj.num);
        System.out.println(obj.square(10));
    }
}

Output:

    Compile - time error

3.protected訪問修飾符

protected資料成員和方法只能由同一個包的類和任何包中的子類訪問
您還可以說protected訪問修飾符類似於預設訪問修飾符,但有一個例外,它在子類中具有可見性。
類不能宣告為protected。
此訪問修飾符通常用於父子關係。

Java中的protected訪問修飾符示例
在此示例中,另一個包中存在的類Test能夠呼叫addTwoNumbers()宣告protected方法。
這是因為Test類擴充套件了類Addition,而protected修飾符允許訪問子類中的protected成員(在任何包中)。

Addition.java

package abcpackage;
public class Addition {

    protected int addTwoNumbers(int a, int b){
        return a+b;
    }
}

Test.java

package xyzpackage;
import abcpackage.*;
class Test extends Addition{
    public static void main(String args[]){
        Test obj = new Test();
        System.out.println(obj.addTwoNumbers(11, 22));
    }
}
Output:

33

4.public訪問修飾符

可以從任何地方訪問宣告為public的成員,方法和類。
此修飾符不對訪問許可權施加任何限制。
java中的public訪問修飾符示例
讓我們看一下上面看到的相同的例子,但這次方法addTwoNumbers()有public修飾符,類Test能夠訪問這個方法,甚至不需要擴充套件Addition類。
這是因為public修飾符隨處可見。

Addition.java

package abcpackage;

public class Addition {

    public int addTwoNumbers(int a, int b){
        return a+b;
    }
}

Test.java

package xyzpackage;
import abcpackage.*;
class Test{
    public static void main(String args[]){
        Addition obj = new Addition();
        System.out.println(obj.addTwoNumbers(100, 1));
    }
}
Output:

101

讓我們以表格形式檢視這些訪問修飾符的範圍:

這裡寫圖片描述


原文地址:

https://beginnersbook.com/2013/05/java-access-modifiers/