首頁 Java java教程 舉例詳解Java中的存取權限修飾符

舉例詳解Java中的存取權限修飾符

Jan 24, 2017 pm 03:36 PM

存取權限符:
(1)public:
對於成員來說:任何其他類別都可以存取它們,不管在同一個套件中還是在另外的套件中。
對於類別:    也是一樣。
(2)friendly:
對於成員老說:如果一個類別的成員沒有任何權限修飾,那麼它門就是缺省包訪問權限,用friendly來表示,註

意friendly不是Java中的關鍵字,這裡是個人喜歡的方式用它表示而已。同一個包內其它類可以訪問,但包外

就不可以。同一個資料夾下的、沒有用package的classes,Java會自動將這些classes初見為隸屬於該目錄

的default package,可以互相呼叫class中的friendly成員。如以下兩個class分別在同一個資料夾的兩個檔案

中,雖然沒有引入package,但隸屬於相同的default package。

class Sundae{
//以下两个方法缺省为friendly
Sundae(){}
Void f() {System.out.println(“Sundae.f()”);
}
public class IceCream{
public static void main(String[] args){
Sundae x = new Sundae();
x.f();
}
}
登入後複製

對於類別:同一個套件中的類別可以用。總之,類別只可以宣告為public或friendly。
(3)private:
對於對成員來說:只能在該成員隸屬於的類別中存取。

class Sundae{
   private Sundae(){}//只能在Sundae class中被调用
   Sundae(int i) {}
   static Sundae makASundae() {
   return new Sundae();
   }
   }
   public class IceCream{
   public static void main(String[] args){
   // Sundae class中构造函数Sundae()是private,
   // 所以不能用它进行初始化
   //Sundae x = new Sundae();
   Sundae y = new Sundae(1);//Sundae(int)是friendly,可以在此调用
   Sundae z = Sundae.makASundae();
   }
   }
登入後複製

對於類別:類別不可以宣告為private。

(4)protected:
對於對於成員來說:相同包中的類別可以存取(包訪問權限);基類透過protected把基類中的成員的訪問權限賦予派生類不是所有類(派生類訪問權限)。

(5)default(預設權限)
  類,資料成員,建構方法,方法成員,都能夠使用預設權限,即不寫任何關鍵字。預設權限即同包權限,同包權限的元素只能在定義它們的類別中,以及同包的類別中被呼叫。

範例:package c05.local;

import pack1.Cookie;
//注意:在这里ChocolateChip继承了类Cookie,按道理bite()方法也在
//ChocolateChip中,可以用x.bite直接调用,但是不可以的,因为类ChocolateChip
//和Cookie类不在一个包中,各自具有包访问权限,为了能够使用x.bite()必须要把
//Cookie方法的访问权限换成public或者protected,但是一旦换成public所有的人就
//可以访问了,这样达不到隐私的要求,所以设置成protected最好,既可以顺利访问,也可以
//避免外面的类调用,保护好隐私的作用
public class ChocolateChip extends Cookie {
  
  public ChocolateChip() {
   System.out.println("ChocolateChip constructor");
  }
  public static void main(String[] args) {
   ChocolateChip x = new ChocolateChip();
   x.bite(); // Can't access bite
   
  }
} ///:~
登入後複製
package pack1;
 
public class Cookie {
public Cookie()
{
System.out.println("Cookie constructor");
}
 
protected void bite(){System.out.println("bite");}
 
}
登入後複製

  

對類別:類不可以宣告protected 

對於類別的權限修飾,以下有更好的解釋:

類的存取權

:可以供所有的類別存取。
預設:預設可以稱為friendly但是,java語言中是沒有friendly這個修飾符的,這樣稱呼應該是來自c++。預設的存取權限是包級存取權限。
         也就是如果寫了一個類別沒有寫入存取權限修飾符,那麼就是預設的存取權限,同一個套件下的類別都可以存取到,即使可以實例化該類別
        (當然如果這個類別不具有實例化的能力除外,例如該類別沒有提供public的建構子)。

說明:

       1.每個編譯單元(類別檔案)僅能有一個public class
       2、public class的名稱(包含大小寫)必須與其類別檔案同名。
       3、一個類別檔案(*.java)中可以不存在public class。
        這種形式的存在的場景:如果我們在某個包內撰寫一個class,僅僅是為了配合約包內的其他類工作,而且
       我們不想再為了撰寫說明文檔給客戶(不一定是現實意義的客戶,可能是調用這個類別的類別)看而傷腦筋,而且有可能過一段時間之後
       有可能會徹底改變原有的做法,並完全捨棄舊版本,以全新的版本代替。
       4、class不可以是private和protected。
       5、如果不希望那個任何產生某個class的對象,可以將該類別得所有構造函數設定成private。但即使這樣也可以產生該類別的對象,就是class的static的成員(屬性與方法)可以辦到。

綜合範例:

First.java:

package Number;
import Test.*;
  
public class Frist extends Test
{
protected String s1 = "你好";
public static void main( String[] args)
{
String s2 = "java";
//System.out.println(s1);
System.out.println(s2);
  
Frist t = new Frist();
System.out.println(t.s);
t.show();
return;
}
  
}
  
Test.java:
package Test;
  
  
public class Test 
{
protected String s = "hello test"; //可以被同包中的类访问以及子类访问,该子类可以是与包Test不同
public void show()
{
Test1 t1 = new Test1();
return;
}
  
  
}
  
class Test1
{
Test1()
{
Test t = new Test();
System.out.println(t.s);
}
}
登入後複製

   

輸出:  

java
hello test
hello test
登入後複製
更多舉例詳解Java中的存取權限修飾符相關文章請關注PHP網網相關文章!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型? Java的類負載機制如何起作用,包括不同的類載荷及其委託模型? Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存? 如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存? Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射? 如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射? Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案? 如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案? Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)? 如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)? Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

See all articles