当一个保护成员在它被声明的类的程序文字外被访问,并且当一个内部保护成员在它被声明的程序的程序文字外被访问,访问就要求通过访问发生的派生类中进行。让声明了一个保护成员M 的B 作为一个基类,并且让D 作为从B 派生的类。在D 的类结构体内,我们可以通过下面的某种形式来访问M:
格式M 的一个无效的类型名称和一个基本的表达式。
一个格式T.M 的基本表达式,T 是由D 或者从D 派生的类提供的。
一个格式E.M 的基本表达式,E 是由D 或者从D 派生的类提供的。
一个格式base.M 的基本表达式。
除了这些形式的访问,一个派生类可以在构造函数初始化时访问基类的保护的构造函数 。
在这个例子中
public class A
{
protected int x;
static void F(A a, B b) {
a.x = 1; // Ok
b.x = 1; // Ok
}
}
public class B: A
{
static void F(A a, B b) {
a.x = 1; // Error, must access through instance of B
b.x = 1; // Ok
}
}
由于访问或者通过A 的实例发生或者在A 的派生类中发生,因此,在A 中可以通过A 和B 的实例来访问X 。当然,由于A 不是从B 中派生的,因此在B 中不可能通过A 的实例访问x。