Java受保护的访问修饰符protected
声明:我不去上来给大家那一张被扯来扯去的√,×表,什么表想必大家心里清楚
下面进入正题:
protected 的主要着眼点在于两点:
1.子类继承 2.是否同包
心里记着上面的那两点,那么protected 需要从以下两个方面或者说结论来分析说明:
1.子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问; 2.子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。
子类与基类在同一包中想必大家很好理解,下面阐述子类与基类不在同一包中这种情形:
//代码1:包A中有一个动物类 package testa; public class Animal { protected void crowl(String c){ System.out.println(c); } } //代码2:包B中有两个类——猫类和鼠类 package testb; import testa.Animal; class Cat extends Animal{ } class Rat extends Animal{ public void crowl(){ crowl("zhi zhi"); //没有问题,继承了Animal中的protected方法: crowl(String) Cat cat=new Cat(); cat.crowl("miao miao"); //wrong, The method crowl(String) from the type Animal is not visible } }
总结:A父与B子不在同一包下,当B extends A的时候,在子类B的作用范围内,只能调用本子类B定义的对象的protected方法(该方法从父类A中继承而来),而不能访问基类实例的protected方法。
其他注意事项:
1.protected 可以修饰数据成员,构造方法,方法成员
2.不能修饰类(内部类除外)。
3.接口及接口的成员变量和成员方法不能声明为 protected