当在超类中声明为受保护的变量,方法或构造函数只能由其他包中的子类或受保护成员的类的包中的任何类访问。
受保护的访问修饰符不能应用于类和接口。方法,字段可以声明为受保护,但是接口中的方法和字段不能声明为受保护。
受保护的访问使子类有机会使用helper方法或变量,同时防止无关的类尝试使用它。
以下父类使用受保护的访问控制,以允许其子类覆盖openSpeaker()方法-
class AudioPlayer { protected boolean openSpeaker(Speaker sp) { //实施细节 } } class StreamingAudioPlayer { boolean openSpeaker(Speaker sp) { //实施细节 8. Java MODIFIERS } }
在这里,如果我们将openSpeaker()
方法定义为私有,那么除了AudioPlayer之外,其他任何类都无法访问该方法。如果我们将其定义为公共的,那么所有外部世界都可以使用它。但是我们的意图是仅将此方法公开给它的子类,这就是为什么我们使用protected修饰符。