1. 程式人生 > >java基礎-類成員訪問許可權控制

java基礎-類成員訪問許可權控制

一 前言

這篇文章是很基礎的一文,沒多大深度,對於開發人員必然是熟練於心。本篇文章的主題是為什麼java要設定類成員訪問級別?其原因也很簡單,就是為了面向物件的封裝特性;將類成員使用不同的訪問級別控制,在資料封裝後,其他的類成員想要訪問當前類成員,就必須要有足夠的許可權才能訪問;這樣做的目的就是我可以隨意修改不想讓其他類成員沒有許可權訪問的資料,只要約定好相關的協議,不影響其他類成員訪問即可;

二 許可權修飾詞介紹

  1. public 意指公有的意思,其修飾的成員許可權最低,表示任何成員都可以訪問;注意點是一個java原始檔中只能有一個類被宣告為public;
  2. defaut 預設級別,成員沒有修飾符號,在同一個包內能被其他成員訪問;
  3. protected 受保護的意思;表示子類能夠繼承父類的方法;在同一個包內被其修飾的成員,其子類能夠訪問;注意點是不可以修飾外部類;
  4. private 私有的意思;許可權最高,表示只允許類內部成員可以訪問;注意點是不可以修飾外部類;
修飾符 同一個類中 同一個包中的其他類 不同包的子類中 不同包的非子類中
public true true true true
protected true true true
default true true
private true

三 具體實施

3.1 public

在com.youku1327.base.authority2 包中建立了一個星球類,有個成員是shine表示光線,對應的getShine方法使用public修改,方法意思是獲得光線;

package com.youku1327.base.authority2;

/**
 * @Author lsc
 * <p> 星球類 </p>
 */
public class Planet {

    private String shine = "好耀眼";

    public String getShine(){
        return shine;
    }
}

在 com.youku1327.base.authority1 包中建立類ZSZXZ, 使用import com.youku1327.base.authority2.Planet;匯入 Planet星球類;在main方法中建立星球類,呼叫獲得光線的方法,得到輸出結果是 好耀眼;驗證了public許可權最低,不同包之間得非子類就可以訪問;

package com.youku1327.base.authority1;

import com.youku1327.base.authority2.Planet;

/**
 * @Author lsc
 * <p> </p>
 */
public class ZSZXZ {

    public static void main(String[] args) {
        // 建立星球實體
        Planet planet = new Planet();
        // 訪問公有成員
        String shine = planet.getShine();
        // 好耀眼
        System.out.println(shine);
    }

}

3.2 protected

將 星球類的getShine方法修飾符號改為 protected;

package com.youku1327.base.authority2;

/**
 * @Author lsc
 * <p> 星球類 </p>
 */
public class Planet {

    private String shine = "好耀眼";

    protected String getShine(){
        return shine;
    }
}

在com.youku1327.base.authority1中建立Earth類繼承星球類Planet(初學者只要理解extends關鍵字表示繼承的意思),繼承的方法是 getShine方法,然後在主類中建立地球例項,呼叫getShine方法,實際上是呼叫 Planet的 getShine 方法(super.getShine(),super意指高階,表示父類 );驗證了不同包的子類可以呼叫父類被protected修飾的成員;

package com.youku1327.base.authority1;

import com.youku1327.base.authority2.Planet;

/**
 * @Author lsc
 * <p> 地球類</p>
 */
public class Earth extends Planet {

    @Override
    protected String getShine() {
        // 呼叫了父類的getShine方法
        return super.getShine();
    }
    // 執行前註釋掉ZSZXZ中的main方法
    public static void main(String[] args) {
        // 建立地球
        Earth earth = new Earth();
        // 好耀眼
        System.out.println(earth.getShine());
    }
}

在回去看看原來的ZSZXZ類的getShine發現報錯了;驗證了不同包的非子類,使用protected修飾無法訪問;

3.3 default

將 Planet 星球類 的 getShine 方法的修飾符去掉,程式碼如下

package com.youku1327.base.authority2;

/**
 * @Author lsc
 * <p> 星球類 </p>
 */
public class Planet {

    private String shine = "好耀眼";

    String getShine(){
        return shine;
    }
}

隨著發現 之前的地球類報錯了,我們把整個地球類註釋掉;驗證了default修飾的成員不能誇包訪問;

我們在 Planet 的同級包下建立Moon類,呼叫 Planet的getShine方法,成功執行;驗證了default修飾的成員能在同一個包中被訪問;

package com.youku1327.base.authority2;

/**
 * @Author lsc
 * <p> </p>
 */
public class Moon  {

    public static void main(String[] args) {
        // 建立星球實體
        Planet planet = new Planet();
        // 訪問公有成員
        String shine = planet.getShine();
        // 好耀眼
        System.out.println(shine);
    }

}

3.4 private

將 Planet 星球類 的 getShine 方法的修飾符改為private;

package com.youku1327.base.authority2;

/**
 * @Author lsc
 * <p> 星球類 </p>
 */
public class Planet {

    private String shine = "好耀眼";

    private String getShine(){
        return shine;
    }
}

發現 之前的 的Moon類主方法中的getShine方法報錯了,驗證了private在同包不同類中不可以被訪問;getShine() 中可以使用 shine 欄位,驗證了同一個類中可以使用private修飾的成員;

 private String shine = "好耀眼";

    private String getShine(){
        return shine;
    }
}

發現 之前的 的Moon類主方法中的getShine方法報錯了,驗證了private在同包不同類中不可以被訪問;getShine() 中可以使用 shine 欄位,驗證了同一個類中可以使用private修飾的成員;

相關推薦

java基礎-成員訪問許可權控制

一 前言 這篇文章是很基礎的一文,沒多大深度,對於開發人員必然是熟練於心。本篇文章的主題是為什麼java要設定類成員訪問級別?其原因也很簡單,就是為了面向物件的封裝特性;將類成員使用不同的訪問級別控制,在資料封裝後,其他的類成員想要訪問當前類成員,就必須要有足夠的許可權才能訪問;這樣做的目的就是我可以隨意修改

Java 之路 (六) -- 訪問許可權控制(Package、Public、protected、friendly、private)

這一章內容比較少,也比較基礎。 不多廢話,下面開始這一章的學習吧。 學習內容 包 package 訪問許可權 public、protected、預設、private 1. Package (1) 原因:為了更好的組織類,Java 提供了

C++ 訪問許可權控制

C++ 的類中有三種不同的許可權的說明符 private,public,protected 三種許可權說明符為C++的封裝性提供了支援,下面介紹一下三種許可權說明符的允許訪問的範圍,即哪些函式可以訪問。 1.private : 類(基類)自身的成員函式

Thinking in Java 第6章 訪問許可權控制 【包:庫單元】

//宣告:部分內容引自《Java程式設計思想(第四版)》機械工業出版社 – 當編寫一個 Java 原始碼檔案時,此檔案通常被稱為編譯單元(有時也被稱為轉譯單元)。每個編譯單元都有一個字尾名 .java。 – 當編譯一個 .java 檔案時,在 Java 檔案

Java程式設計思想 ch6 訪問許可權控制

6.1 包:庫單元 public class FullQualification{ public static void main(String[] args){ java.util.ArrayList li

java程式設計思想-06訪問許可權控制

訪問控制(或隱藏具體實現)與“最初的實現並不恰當”有關。便於未來重構程式碼,而不必對業務層做過多的改變。因此,Java提供了訪問控制修飾詞,以供類庫開發人員向客戶端程式設計師指明哪些是可用的,哪些是不可用的。 訪問控制的等級,從最大許可權到最小許可權依次為:p

Java中子訪問許可權為何比父大?

因為 向上轉型及java程式設計維護的原因例:假設一個父類A 擁有的方法 public void setXXX(){} 可以被其他任意物件呼叫這個方法被子類B 覆寫後 為 void setXXX(){} 即 預設的 訪問許可權 只能被本包極其子類 所訪問假設 其他包中的物件

java基礎庫學習(七.3)控制執行緒

前言 執行緒的五個狀態新建/就緒/執行/阻塞/死亡 為了很好的控制執行緒的狀態(新建態,就緒態--執行態控制不了),我們來看一下執行緒物件的幾個方法,也就是Thread的幾個方法 控制執行緒的狀態 1使執行緒處於新建態 執行緒子類 a=new 執行緒子類();  

java程式設計入門2 java中的四種訪問許可權控制

在java中提供了四種訪問許可權控制:預設訪問許可權(包訪問許可權),public,private以及protected 只有預設訪問許可權(包訪問許可權)和public能用來修飾類(不包括內部類) 修飾變數和方法這四種許可權均可 1.public 修飾類表示該類對其他所有類可見 修飾一個類的變數和

Java程式設計思想(六)—— 訪問許可權控制

一、包:庫單元         包內含有一組類,它們在單一的名字空間下被組織在了一起。例如,在Java的標準釋出中有一個工具庫,它被組織在java.util名字空間下,如果要使用此名字空間下的ArrayList類,可以使用其命名的方式,如下: pu

Java訪問許可權控制的使用不當,活生生地引發了一場血淋漓的慘案

人在什麼面前最容易失去抵抗力? 美色,算是一個,比如說西施的貢獻薄就是忍辱負重、以身報國、助越滅吳;金錢,算是另外一個,我們古人常說“錢乃身外之物,生不帶來死不帶去”,但我們又都知道“有錢能使鬼推磨”。 除去美色和金錢,我認為還有一個,就是讀者的認可——“二哥,你的文章真的很棒,我特別喜歡。希望能多多更新

Java訪問許可權控制的重要性

人在什麼面前最容易失去抵抗力? 美色,算是一個,比如說西施的貢獻薄就是忍辱負重、以身報國、助越滅吳;金錢,算是另外一個,我們古人常說“錢乃身外之物,生不帶來死不帶去”,但我們又都知道“有錢能使鬼推磨”。 除去美色和金錢,我認為還有一個,就是讀者的認可——“二哥,你的文章真的很棒,我特別喜歡。希望能多多更新

Java程式設計思想第六章訪問許可權控制練習題解答(待更新完整.......)

練習解答 練習1 練習2 練習3 練習1 先在另一個包建立程式碼,命名為ch6Ex1.java package ch5; public class ch6Ex1 { public ch6Ex1()

Java程式設計思想 第六章:訪問許可權控制

一個優秀的程式設計師是通過不斷的重構程式碼讓自己的程式變得更加易用、可讀和完善的。在重構修改的過程中,如果是一個類庫編寫人員,那麼怎麼樣保證自己修改的部分不會影響到客戶端編寫人員(即使用這個類庫的程式設計師)呢?同時也要避免他們對自己類庫內部的程式進行改動。Java中提供了訪問許可權控制的概

java基礎———與物件,成員變數和區域性變數,封裝及關鍵字static和this

類與物件,成員變數和區域性變數,封裝及關鍵字static和this 面向物件的思想 類與物件及其應用 物件的記憶體圖 成員變數和區域性變數的區別 匿名物件 封裝(private) this關鍵字 構造方法 物件的建立步驟

Java訪問許可權 ——Thinking in Java學習筆記(七)

這裡其實只是想記錄一個知識點,就是類的訪問許可權。 類既不可以是private的,因為會導致只能自己能訪問到這個類。也不可以是protected的。 也就是說,類的訪問許可權修飾只有兩個選擇,public或者不加修飾。那麼這兩者有什麼區別呢? 上一段程式碼看一下

,內部類,區域性內部類的訪問許可權控制

( 1 )對於外部類而言,它也可以使用訪問控制符修飾,但外部類只能有兩種訪問控制級別: public 和預設。因為外部類沒有處於任何類的內部,也就沒有其所在類的內部、所在類的子類兩個範圍,因此 private 和 protected 訪問控制符對外部類沒有

Thinking in Java 第四版完整版 第六章練習題 訪問許可權控制

Thinking in Java 第四版完整版 第六章練習題,記錄一下(jdk1.8.0) 1. package com.test.c06; /** * 練習1:在某個包中建立一個類,在這個類所處的包的外部建立該類的一個例項。 * @author admin11

JAVA程式設計思想學習筆記(五)訪問許可權控制

訪問許可權控制 包:庫單元 打包關鍵字:package 匯入關鍵字:import package必須是除註釋以外的第一句程式程式碼。 java直譯器的執行過程: 找出環境變數CLASSPATH。 CLASSPATH包含一個或多個目錄,用作查詢.class檔案

java程式設計思想 第 6 章 訪問許可權控制

更新類庫時為了讓開發人員知道哪些類是被其它類引用的,不能被修改而引人了訪問許可權控制。 public > protect >(預設) > private 一、包:庫單元 包內包含一組類、它們在單一的名稱空間下被組織到了一起: jav