protected权限具有包可见性、子类可见性(default只有包可见性)。
什么是包可见性和子类可见性呢?有三个类在包1、包2中,其中Son继承自父类Father
package package1;
public class Father {
protected void function()
{
System.out.println("I'm Father");
}
void function2(){}
}
package package1;
public class OtherClass {
public static void main(String args[])
{
Father f = new Father();
f.function();
//同一包内可以由实例访问它的protected方法,即包可见性
}
}
package package2;
import package1.Father;
public class Son2 extends Father {
public static void main(String args[])
{
Father f = new Father();
//不同包内不可以由父类实例访问父类protected方法
f.function();//报错
Father f2 =new Son2();
//即使采用多态也不能访问
f2.function();//报错
//可以由子类实例访问由父类继承而来的protected方法,即子类可见性
Son2 son2=new Son2();
son2.function();
}
}