先说一下Java中的4中修饰符的访问权限
访问权限 类 包 子类 其他包
public ∨ ∨ ∨ ∨
protect ∨ ∨ ∨ ×
default ∨ ∨ × ×
private ∨ × × ×
上面的这种访问权限表网上一大堆,但是我今天说的问题是其中关于default的问题。
由上表可知default访问权限是在子类中不能被调用,但是我却发现子类中能调动default修饰符修饰的变量或方法!!!这是怎么回事呢??
package cn.ilovessf.Demo1;
public class Father {
private String name = "Tom";
//该方法是默认访问权限
String getName(){
return this.name;
}
}
//上面是Facther类,下面是Son类
package cn.ilovessf.Demo1;
public class Son extends Father{
public static void main(String[] args) {
Father f = new Father();
String name = f.getName();
System.out.println(name);
}
}
运行子类的main方法可以看到竟然能够输出结果!!!!
这是为什么呢???明明说好的子类不能调用default方法的。
后来转而一想,明白了。
大家要注意!!!Father类和Son类是在同一个包下的。
所以,此时根据上面的访问权限,同包下的类是可以default修饰的方法或变量的!
所以,我又试了在别的包下面,又写了一个Son类,也继承了Father类,此时因为两个类不在一个包下面,所以,这时候Son类中就不能得到Father类的getName()方法了!大家可以自己动手试一下!