【3】訪問控制符 public, protected, private

public             公有的java

protected       受保護的this

private           私有的spa


這個三個詞語用腳趾頭猜都能知道是什麼意思了,很簡單,一切有萬能的baidu, gugecode

經過這個三個字面意思能夠了解到類的屬性或方法可否在外部能夠訪問,什麼是類的外部?,什麼是類的內部?對象

    代碼:         開發

class Elson { //1

    public String name = "elson"; 
    
    protected String duty;
    
    private int age = 10;
    
    public int showName(){
        return this.age;
    }

}//2

//那麼1-2的範圍就是指類Elson的內部,這個內部固然也是包含showName()這個方法,在showName()裏面寫東西也是
//屬於在Elson類的內部


//那外部呢
public class Test{

    public static void main(String[] args){
    
        Elson ee = new Elson(); //顧名思義,對象 ee 固然就是在 Elson 的外部了
        //System.out.printf("%s\n", ee.name);         //elson
        //System.out.printf("%d\n", ee.age);          //error
	//System.out.printf("%d\n", ee.showName());   // 10
    }

}

那麼JAVA的這三控制符就是相對於類的外部來討論的,控制在外部對象能訪問什麼,不能訪問什麼,而在類的內部,不管是屬性仍是方法都是公開透明的class

    例如上面的代碼object

        在外部直接訪問私有的age,直接報錯權限

        可是在類的內部經過showName()是能夠返回(訪問)private 的 age, 能夠說是間接吧!方法

那這樣有什麼用呢?咱們平時作些小項目都是本身寫個class,而後本身在外部new個對象調用,一切都是本身一我的,這樣訪問控制符寫公有私有保護(或許)都沒什麼區別,但咱們思考下,假如咱們是多人開發呢?!

        

/*
    咱們作個假設,假如兩個文件 classFile 和 objectFile
    classFile  : 只負責寫類,不會new
    objectFile : include classFile文件進來,只負責new實例來用 

    classFile  由你來寫
        而後 Elson 只能在 objectFile 引入 你的classFile 文件,只能使用你提供的類來操做,
    並沒有權限修改classFile文件
    
   如今有個打折的活動
    僞碼
        class YourClass{//這個是你定義的類
            public double discount = 0.85;   //默認
            public double showPriceOfBook(){
                 return 0.85 * 50;
            }
        }

    那麼Elson在外部是否是能夠經過 
        $obj = new YourClass(); 
        $obj->showPriceOfBook();這樣調用
    但並非全部人都像Elson那樣純潔的,

    假設Jack也能夠經過一樣的方式進行操做,不過他多了步
       $obj = new YourClass();
       $obj.discount = 0.3;//搞破壞,隨便設置折扣率
       $obj->showPriceOfBook();
    若是有萬萬千千的人都是使用你這個類,那麼後果不堪設想,你總不能對這萬萬千千的人說不能自定義discount吧?
    因此咱們能夠
       private double discount = 0.85;
    那麼外部的人就不能隨便設置discount了,但這問題又來了,總公司定義book的折扣率爲0.85,但旗下有不少小
    的分公司,他們之間或許有價格競爭,你總不能不讓人家設置折扣率吧?行!只要在成本範圍,大家隨便設置
    因此咱們能夠加個方法
       private double discount = 0.85; //屬性私有
       public double setter(double d){ //方法公有,以便外部調用   
          if(d < 0.5){ return false; } //大家隨便設置 只要折扣率不低於0.5就好了
          this.discount = d;
          return this.discount;
       } 
    這樣你內心就有底了,一切在控制範圍以內
*/

    以上只是我的看法,一切須要你帶着本身的思考去看待

相關文章
相關標籤/搜索