@frank-shaw
2015-10-29T07:27:12.000000Z
字数 680
阅读 2224
java.基础知识
面试吃过一次亏之后,不敢忘。

其实主要是protected 与 default 修饰符让人比较容易混淆。实验代码如下:
这是 “修饰符权限”这个包里的代码:
package 修饰符权限;import 修饰符权限2.Father;public class Test1 {public static void main(String[] args) {Son s1 = new Son();s1.eat();System.out.println(s1.num + s1.name);}}class Son extends Father {String name = "baby";}
下面是“修饰符权限2”包里面的代码:
package 修饰符权限2;public class Father {public int num = 1;public void eat(){System.out.println("父亲吃东西啦");}public Father() {// TODO Auto-generated constructor stub}}
可以看到,这个时候Father类的所有变量与函数都使用public修饰,即使在不同包中,只要Son继承了Father类,那么就可以访问到,运行第一个程序,发现是没有问题的。

但是,如果将Father类的变量num前的public修饰符去掉(此时变成了default修饰符),那么就会发生错误:

可以看到,此时的Father类的变量num对于子类Son来说变成了不可见的,也就印证了不同包中父类的default修饰的变量对于子类来说是不可访问的。
其他情况也可以做类似的实验试一试。
