1. 程式人生 > >Java中四種訪問修飾符區

Java中四種訪問修飾符區

java中四種訪問修飾符區別及詳解全過程
  客戶端程式設計師:即在其應用中使用資料型別的類消費者,他的目標是收集各種用來實現快速應用開發的類。

  類建立者:即建立新資料型別的程式設計師,目標是構建類。  

  訪問控制存在的原因:a、讓客戶端程式設計師無法觸及他們不應該觸及的部分 ; b、允許庫設計者可以改變類內部的工作方式而不用擔心會影響到客戶端程式設計師

  java的四個關鍵字:public、protected、default、private(他們決定了緊跟其後被定義的東西可以被誰使用)

適用範圍<訪問許可權範圍越小,安全性越高>

     **訪問許可權 類 包 子類 其他包
     public ∨ ∨ ∨ ∨ (對任何人都是可用的)
     protect ∨ ∨ ∨ ×    (繼承的類可以訪問以及和private一樣的許可權)
     default ∨ ∨ × ×    (包訪問許可權,即在整個包內均可被訪問)
     private ∨ × × ×    (除型別建立者和型別的內部方法之外的任何人都不能訪問的元素)**

以下,用程式碼進行詳解(建四個類 Person Student Teacher Parents 和一個測試類)

package com.zq.demo.test1;
/**
* 類內
* @author Administrator
*/
public class Person {
public String uname = “王五”;

public void introduceMyself(){                
    System.out.println(uname);             
}

}

package com.zq.demo.test1;
//同一個包
public class Student {
Person p = new Person();
public void test(){
System.out.println(p.uname);
}
}

package com.zq.demo.test1;
//子類
public class Teacher extends Person{
public int age;
Person p = new Person();
public void test1(){
System.out.println(p.uname);
}
}
package com.zq.demo.test2;
//不同包
import com.zq.demo.test1.Person;

public class Parents {
public String uname = “haha”;
Person p = new Person();
public void test2(){
System.out.println(p.uname);
}
}
這裡寫圖片描述


測試類的結果 顯示public在上述均能訪問到

用同樣的四個類 來測試protected

這裡寫圖片描述

其他三個無影響
在將Person中的uanme改為protected後 類Parents便報錯了 The field Person.uname is not visible (說明不能跨包)

說明除了跨包 其他均不影響訪問

private

這裡寫圖片描述

只有本類中可以訪問 但是藉助在Person類中有關uname的set、get方法便可以進行訪問

這裡寫圖片描述

這裡寫圖片描述

  測試結果說明 只能在本包中進行訪問 在其他包 即使是繼承關係 也無法進行訪問這裡寫圖片描述
default