@frank-shaw
2015-10-29T15:27:12.000000Z
字数 680
阅读 1953
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修饰的变量对于子类来说是不可访问的。
其他情况也可以做类似的实验试一试。