【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;
       } 
    这样你内心就有底了,一切在控制范围以内
*/

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

相关文章
相关标签/搜索