Java中的訪問修飾符是指用來限制類、變數、方法以及內部類的訪問範圍的關鍵字。它們是構成Java訪問控制許可權系統的基礎。Java提供了四種訪問修飾符:
- public:可以被當前類、當前包、其它包中的類訪問
- protected:可以被當前類、當前包、其它包中的子類訪問
- default:可以被當前類、當前包訪問
- private:只能被當前類訪問
在本篇文章中,我們將詳細介紹Java中的訪問修飾符的使用,包括使用場景、訪問許可權、使用注意事項等方面。
一、public修飾符
public修飾符表示被該修飾符修飾的成員可以被任何類訪問,無論是在同一個包中,還是在不同包中。
以下是一個使用public修飾符的示例:
package com.example;
public class A {
public int num = 0;
public void print() {
System.out.println("Hello World");
}
}
package com.example2;
import com.example.A;
public class B extends A {
public void test() {
System.out.println(num);
print();
}
}
在上面的代碼中,類A中的變數num和方法print都是public修飾的。因此,在包com.example2中的類B中可以直接訪問到A中的num和print方法。
二、protected修飾符
protected修飾符表示被該修飾符修飾的成員可以被當前類、當前包以及不同包中的子類訪問。
以下是一個使用protected修飾符的示例:
package com.example;
public class A {
protected int num = 0;
}
package com.example2;
import com.example.A;
public class B extends A {
public void test() {
System.out.println(num);
}
}
在上面的代碼中,類A中的變數num是protected修飾的。因此,在包com.example2中的類B中可以直接訪問到A中的num變數。
三、default修飾符
default修飾符也叫包訪問修飾符,表示被該修飾符修飾的成員可以被同一個包中的其他類訪問,但是對於不同包中的類沒有訪問許可權。
以下是一個使用default修飾符的示例:
package com.example;
class A {
int num = 0;
}
package com.example2;
import com.example.A;
public class B {
public void test() {
A a = new A();
System.out.println(a.num);
}
}
在上面的代碼中,類A中的變數num是default修飾的。因此,在類A被定義的包com.example以內的類(包括類A本身)中可以直接訪問num變數。但是,在包com.example2中的類B中無法直接訪問到A中的num。
四、private修飾符
private修飾符表示被該修飾符修飾的成員只能被當前類訪問,對於同一個包、不同包中的其他類以及子類都沒有訪問許可權。
以下是一個使用private修飾符的示例:
package com.example;
public class A {
private int num = 0;
}
package com.example2;
import com.example.A;
public class B extends A {
public void test() {
System.out.println(num); // 編譯錯誤
}
}
在上面的代碼中,類A中的變數num是private修飾的。因此,在包com.example2中的類B中無法直接訪問到A中的num變數。
五、使用注意事項
在使用訪問修飾符時,需要注意以下幾點:
- 被public修飾的成員可以被任何類訪問,因此應該謹慎使用,以保證程序的安全性。
- 被protected修飾的成員只能被同一個包中的其他類和不同包中的子類訪問,因此應該在需要被繼承的類中使用該修飾符。
- 被default修飾的成員只能被同一個包中的其他類訪問,因此應該在同一個包中的類中使用該修飾符。
- 被private修飾的成員只能被當前類訪問,因此應該在需要被封裝的類中使用該修飾符。
在實際使用中,應該根據程序的具體需求和安全性要求來選擇合適的訪問修飾符。
原創文章,作者:ODYZD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/330644.html