刚看完马士兵的java视频,我就研究了一下我一直有些顾忌以及疑惑的java修饰权限,大概搞明白了。
1.private 和 public
private 在类内部是可以随便访问的,和public都是人如其名,一个私有,一个公共。private像个极其吝啬的财主,除了自己以外,东西连他儿子都不给,更别说别的情况了。
public class test extends A {
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new A();
test t = new test();
System.out.println(a.b);
System.out.println(t.b);
<span style="white-space:pre"> </span>//以上两行编译通不过
}
}
class A {
private int b = 10;
}
整个文件就像一个书店,而public就像里面的各种书籍,对来到书店的所有人开放。
2.default
default也就是默认,在类内部的访问就不必说了。
当在同一个包里面的时候,其他类都可以访问(我在A里面定义了一个整形c变量)
public class test extends A {
public static void main(String[] args) {
// TODO Auto-generated method stub
test t = new test();
System.out.println(t.c);
}
}
当我把A放到别的包里面时,此时就不能访问c了,子类也不行。那default的权限最大就到这里咯,整个文件里面有各种包裹,在一个包裹里面,default可以肆意横行,把它放到别的包裹之后就焉儿了。
3.protected
我之前一直错误的以为private比protected权限大,真是对不起给我教授java只是的学长和看过的书。
我在A里面protected int ee = 3;在test里面就能访问到
import dd.A;
public class test extends A {
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new A();
System.out.println(a.ee);
test t = new test();
System.out.println(t.ee);
}
}
但是a是不能访问到ee变量的,因为此时的a访问的ee是直接访问,而不是通过子类访问,这就是protected和public的从差距所在吧。
当然,吧A放到和test同一个包下就可以了。