Ant*_*ton 3 java inheritance visibility protected access-levels
在java中,有三种访问级别:
那么为什么java编译器允许这种情况发生呢?
TestBlah.java:
public class TestBlah {
public static void main(String[] args) {
Blah a = new Blah("Blah");
Bloo b = new Bloo("Bloo");
System.out.println(a.getMessage());
System.out.println(b.getMessage()); //Works
System.out.println(a.testing);
System.out.println(b.testing); //Works
}
}
Run Code Online (Sandbox Code Playgroud)
Blah.java:
public class Blah {
protected String message;
public Blah(String msg) {
this.message = msg;
}
protected String getMessage(){
return(this.message);
}
}
Run Code Online (Sandbox Code Playgroud)
Bloo.java:
public class Bloo extends Blah {
public Bloo(String testing) {
super(testing);
}
}
Run Code Online (Sandbox Code Playgroud)
Law*_*Dol 10
因为protected表示同一个包中的子类或其他类.
当省略修饰符时,实际上存在第四个"默认"访问级别,它提供对同一包中其他类的访问.
protected默认和public访问之间也是如此.