[关闭]
@frank-shaw 2015-10-29T07:27:12.000000Z 字数 680 阅读 1834

java四种修饰符及权限

java.基础知识


面试吃过一次亏之后,不敢忘。

其实主要是protected 与 default 修饰符让人比较容易混淆。实验代码如下:
这是 “修饰符权限”这个包里的代码:

  1. package 修饰符权限;
  2. import 修饰符权限2.Father;
  3. public class Test1 {
  4. public static void main(String[] args) {
  5. Son s1 = new Son();
  6. s1.eat();
  7. System.out.println(s1.num + s1.name);
  8. }
  9. }
  10. class Son extends Father {
  11. String name = "baby";
  12. }

下面是“修饰符权限2”包里面的代码:

  1. package 修饰符权限2;
  2. public class Father {
  3. public int num = 1;
  4. public void eat(){
  5. System.out.println("父亲吃东西啦");
  6. }
  7. public Father() {
  8. // TODO Auto-generated constructor stub
  9. }
  10. }

可以看到,这个时候Father类的所有变量与函数都使用public修饰,即使在不同包中,只要Son继承了Father类,那么就可以访问到,运行第一个程序,发现是没有问题的。
1212.png-6.1kB

但是,如果将Father类的变量num前的public修饰符去掉(此时变成了default修饰符),那么就会发生错误:
搜狗截图20151029152330.png-10.5kB

可以看到,此时的Father类的变量num对于子类Son来说变成了不可见的,也就印证了不同包中父类的default修饰的变量对于子类来说是不可访问的。

其他情况也可以做类似的实验试一试。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注