java中用于控制可见性的4个访问修饰符
- private————仅对本类可见
- public————对该项目中所有类可见
- protected————对本包和所有子类可见
- default(默认,不需要写明)————对本包可见
(偷个图)
回归正题 ↓
在某些时候,人们希望超类中的某些方法允许被子类访问,或这允许子类中的方法访问超类中的某个域,此时就需要将这些方法和或域声明为protected
但是在实际应用中,要谨慎使用protected属性。假设需要将设计的类提供给其它程序员使用,而在这个类中设置了一些受保护域,由于其他程序员可以由这个类再派生出新类,并访问其中的受保护域,这种情况下可能会对这个类的实现进行修改就必须通知所有使用这个类的程序员,违背了面向对象的封装原则(摘自java核心技术 卷1)
public class Animal{
protected String name = "张三";
}
public class Dog extends Animal{
}
public class Test{
Dog dog = new Dog();
System.out.print(dog.name);
}
当我们在开发的时候,如果将Animal中的name值做了修改后,就会影响继承了它类的对象的最后的输出结果.
在实际应用中,受保护的方法根据有实际意义,如果需要限制某个方法的使用,就可以将它声明为protected,这表明子类得到信任,可以正确的使用这个方法,其它子类则不行。