Java教程33—Java 訪問修飾符public、private、protected和default
在練習java程式時,你必須看過public、private、protected關鍵字,這些被稱為訪問修飾符。
訪問修飾符是對另一個類中的類,建構函式,資料成員和方法的訪問進行一定的限制。
在java中我們有四個訪問修飾符:
- default
- private
- protected
- 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
讓我們以表格形式檢視這些訪問修飾符的範圍:
原文地址: