Java訪問修飾符public、private、protected及默認訪問權限詳解
前言
在Java編程中,訪問修飾符(Access Modifiers)是控制類、方法、字段和構造函數訪問范圍的重要機制。Java提供了四種主要的訪問修飾符:public、private、protected和默認(不寫修飾符)。不同的修飾符決定了成員或類在類內部、同一包內、子類以及整個程序中的可見性。
本文將詳細介紹這些訪問修飾符的區(qū)別,并討論它們在實際開發(fā)中的應用場景。
1. public 訪問修飾符
public 修飾符是訪問權限最寬松的修飾符,表示任何類都可以訪問被修飾的類或類成員。無論這個類位于哪個包中,public成員始終對所有其他類可見。
特點:
- 類:當一個類被聲明為
public時,任何其他類都可以訪問這個類。 - 字段、方法、構造器:聲明為
public的字段、方法或構造器可以被任何類訪問,不受包和繼承關系的限制。
示例:
// 文件:Animal.java
package com.example;
public class Animal {
public String name;
public void makeSound() {
System.out.println("Animal makes a sound");
}
}
在這個例子中,Animal 類和它的 name 字段以及 makeSound() 方法都被聲明為 public,因此任何其他包中的類都可以訪問它們。
適用場景:
- 公共API:當類或方法需要暴露給整個應用程序或多個模塊時,
public是理想的選擇。 - 工具類:如
Math類的靜態(tài)方法通常是public,因為這些方法是通用工具,需要在多個地方調用。
2. private 訪問修飾符
private 修飾符是訪問權限最嚴格的修飾符。使用 private 修飾的成員只能在類內部訪問,類的外部(包括其子類)無法訪問。
特點:
- 類:類不能被聲明為
private,Java不允許使用private修飾符來限制類的訪問權限。 - 字段、方法、構造器:聲明為
private的字段、方法或構造器僅在聲明它們的類內部可見,其他類無權訪問。
示例:
// 文件:Person.java
package com.example;
public class Person {
private String ssn; // 社會安全號碼 (私密數據)
private void displaySsn() {
System.out.println("SSN: " + ssn);
}
public void setSsn(String ssn) {
this.ssn = ssn;
}
}
在這個例子中,ssn 字段和 displaySsn() 方法都是 private,所以它們只能在 Person 類內部被訪問。其他類無法直接讀取或修改 ssn,只能通過 setSsn() 這樣的 public 方法進行控制。
適用場景:
- 信息隱藏:當類中的某些數據或實現細節(jié)不希望被外部訪問或修改時,使用
private是最佳選擇,確保了數據封裝。 - 安全性:敏感數據如密碼、個人信息等應使用
private修飾符,以防止被意外或惡意篡改。
3. protected 訪問修飾符
protected 修飾符允許類的成員在同一包內或繼承關系中的子類中訪問。與 private 不同的是,protected 使得子類可以訪問父類的受保護成員。
特點:
- 類:類不能聲明為
protected。 - 字段、方法、構造器:聲明為
protected的成員在同一個包內的所有類中可見,此外,子類也可以訪問它們。
示例:
// 文件:Animal.java
package com.example;
public class Animal {
protected String species;
protected void displaySpecies() {
System.out.println("Species: " + species);
}
}
// 文件:Dog.java
package com.example;
public class Dog extends Animal {
public void showSpecies() {
this.species = "Canine"; // 訪問 protected 成員
this.displaySpecies(); // 訪問 protected 方法
}
}
在這個例子中,Animal 類的 species 字段和 displaySpecies() 方法是 protected 的,Dog 作為其子類可以訪問這些成員。
適用場景:
- 繼承和擴展:當希望類的某些成員能被子類繼承和使用,但不希望被完全公開時,使用
protected是合適的選擇。
4. 默認(包訪問權限)
如果在類或成員聲明時未顯式指定訪問修飾符,則默認為包級訪問權限。這種訪問權限僅限于同一包內的類,包外的類無法訪問它們。
特點:
- 類:如果類沒有顯式聲明為
public,它就具有包級訪問權限,僅對同一包內的類可見。 - 字段、方法、構造器:默認修飾符允許同包中的類訪問這些成員,但包外的類和子類都無法訪問。
示例:
// 文件:Animal.java
package com.example;
class Animal {
String name;
void makeSound() {
System.out.println("Animal makes a sound");
}
}
// 文件:Test.java
package com.example;
public class Test {
public static void main(String[] args) {
Animal animal = new Animal();
animal.name = "Lion"; // 同一包內,訪問包級成員
animal.makeSound();
}
}
在這個例子中,Animal 類和它的成員沒有訪問修飾符,因此只能在 com.example 包內被訪問。Test 類可以訪問 Animal,但位于其他包中的類將無法訪問 Animal。
適用場景:
- 包內共享:當類或成員只需要在同一個包中共享時,可以使用默認訪問權限。
5. 總結:訪問修飾符的區(qū)別
| 修飾符 | 類內部 | 同一包 | 子類 | 其他包 |
|---|---|---|---|---|
public | ?? | ?? | ?? | ?? |
protected | ?? | ?? | ?? | ? |
| 默認(無修飾) | ?? | ?? | ? | ? |
private | ?? | ? | ? | ? |
結語
在Java中,訪問修飾符是控制類和成員可見性的核心機制。通過合理使用 public、private、protected 和默認訪問權限,開發(fā)者可以實現更好的數據封裝、安全性以及模塊化設計。在實際開發(fā)中,根據成員的功能和作用域選擇合適的修飾符,是編寫健壯、安全代碼的重要步驟。
到此這篇關于Java訪問修飾符public、private、protected及默認訪問權限的文章就介紹到這了,更多相關Java訪問修飾符public、private、protected內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot集成IJPay實現微信v3支付的示例代碼
本文主要介紹了SpringBoot集成IJPay實現微信v3支付的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07
java接口類中的@selectProvider接口的使用及說明
這篇文章主要介紹了java接口類中的@selectProvider接口的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Spring boot通過HttpSessionListener監(jiān)聽器統計在線人數的實現代碼
這篇文章主要介紹了Spring boot通過HttpSessionListener監(jiān)聽器統計在線人數的實現代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-02-02

