java权限修饰符( protected )
程序员文章站
2024-03-20 23:50:28
...
protected修饰符的官方解释是:对本包,以及所有子类可见
对本包可见:所有调用protected成员(字段或方法)的地方,只要是和定义该成员的类处于同一个包,均是正确的
示例1:
package p1;
public class Father {
protected void f(){
System.out.println("f方法执行了");
}
}
package p1;
public class Main {
public static void main(String[] args) {
Father father = new Father();
father.f(); //可编译
}
}
当调用上例中 f 方法的地方,和Father类不在同一个包时,便会报错,无法编译
以上便是对本包可见的含义
对子类可见:
在子类中,子类可以使用从父类继承得到的protected成员,注意是继承得到的,如果仅仅是在子类中构造了一个父类对象,然后调用该父类对象的protected成员,同时若该子类又不和父类在同一个包中,那便会无法编译。
示例2
在上例中,Son类继承了Father类且和Father类不在同一个包中。
在Son类内部,可以直接使用从父类继承来的f方法,但是无法通过构造父类对象,调用该对象的f方法。因为通过父类对象调用的f方法,不是该子类继承得到的方法。
此处有个特例:即在不同包的子类中能够构造子类对象,能够通过子类对象调用protected成员
基于以上的几个例子,特总结如下:
调用protected成员时,首先判断调用处是否和protected成员定义处在同一个包内,如若是,则可编译成功;如果不是,再判断调用处是否是处于protected成员所在类的子类,即便是在子类中,子类也仅可使用继承自父类的protected成员,通过其他途径获得的无法使用