public 公有的
protected 受保护的
private 私有的
这个三个词语用脚趾头猜都能知道是什么意思了,很简单,一切有万能的baidu, guge
通过这个三个字面意思可以了解到类的属性或方法能否在外部可以访问,什么是类的外部?,什么是类的内部?
代码:
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的这三控制符就是相对于类的外部来讨论的,控制在外部对象能访问什么,不能访问什么,而在类的内部,无论是属性还是方法都是公开透明的
例如上面的代码
在外部直接访问私有的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;
}
这样你心里就有底了,一切在控制范围之内
*/
以上只是个人见解,一切需要你带着自己的思考去看待