google了好久,终于进一步了解了protected的作用范围,先写例子:

package one;

public class A
{

// 暗示默认的构造方法

protected int p;

}

////////////////////////////////

package two;
import one.A;

class B extends A
{

void myMethod()
{
p = 1; // 可以访问
A a = new A();
a.p = 1; // 不可以访问, p必须为public才可以.
}

}
=============================================================
package three;

public class C
{
/**
* constructor
* @param dd
*/
protected C( int v )
{
this.v = v;
}

private final int v;

}
////////////////////////////////

package four;
import three.C;

class D extends C
{
/**
* constructor
*/
public D()
{
super(10); // 正确.通过super访问C受保护的构造方法
}

void myMethod()
{
C c = new C(3); // 不正确, C必须提供public构造方法.
D d = new D(); // 可以
}

}

==============================================================
protected受访问保护规则是很微妙的。虽然protected域对所有子类都可见。但是有一点很重要,
子类只能在自己的作用范围内访问自己继承的那个父类protected域,而无法到访问别的子类(同父类的亲兄弟)
所继承的protected域。
(不可以通过别的类来访问别的类中继承的protected的值或方法)