作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不同 modifier 的作用如上图所示: public > protected > package >private
但是 protected 具体在什么场合下应用呢?
“ Generally, if something is not deliberately conceived as public, I make it private.
If a situation arises where I need access to that private variable or method from a derived class, I change it from private to protected. ”
一般来说,如果不想被类之外的访问,则设为 private.
但是如果想让某些变量或者 method 可以在子类中访问,就可以把这些变量或者 method 设为 protected. 因此 protected 主要是在继承中的应用。
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void printName() {
System.out.println(name);
}
}
public class Bird extends Animal {
public Bird(String name) {
super(name);
}
public void printBird() {
System.out.println(name);
}
}