该网页链接@MadProgrammer给出了一个体面的解释:
“ protected修饰符指定只能在自己的包中访问该成员(与package-private一样),并且只能由其在另一个包中的类的子类访问。”
这意味着受保护的成员必须直接通过其定义的类或该类的子类进行访问,同时也要位于适当的包中。这不一定意味着您可以通过在所述类的子类中创建的所述类的实例来访问受保护的成员。重点是所涉及的软件包。
这是您的示例:
package first; // Current packageFirst fst = new First(); // from package first and does not extend anythingfst.pro();
试图从哪个软件包访问有问题的成员? 第一
是否在同一包中定义了包含所述成员的(子)类或其父类(从其继承该成员的类)? 是的,First
被定义在packagefirst
,所以protected
成员是从访问First
中package first
。
package second; // Current packageFirst fst = new First(); // from package first and does not extend anythingfst.pro();
试图从哪个软件包访问有问题的成员? 第二
是否在同一包中定义了包含所述成员的(子)类或其父类(从其继承该成员的类)? 不,First
被定义在packagefirst
,所以protected
使得成员从人迹罕至First
的package second
。
package second; // Current packageSecond sec = new Second(); // from package second and extends First from package firstsec.pro();
试图从哪个软件包访问有问题的成员? 第二
是否在同一包中定义了包含所述成员的(子)类或其父类(从其继承该成员的类)? 是的,Second
,这是在所定义packagesecond
,继承了部件First
,因此protected
部件是从访问Second
中package second
。
为了清楚起见,有更多示例:
package first; // Current packageSecond sec = new Second(); // from package second and extends First from package firstsec.pro();
试图从哪个软件包访问有问题的成员? 第一
是否在同一包中定义了包含所述成员的(子)类或其父类(从其继承该成员的类)? 是的,Second
继承了构件First
,这是在所定义packagefirst
的,所以protected
构件是从访问Second
中package first
。
package first; // Current packageThird third = new Third(); // from package third and extends Second from package second, // which extends First from package firstthird.pro();
试图从哪个软件包访问有问题的成员? 第一
是否在同一包中定义了包含所述成员的(子)类或其父类(从其继承该成员的类)?
是的,Third
继承了构件Second
,它继承它从First
其中该构件被定义(packagefirst
),所以protected
部件是从访问Third
在package first
。



