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的值或方法)
转载于:https://blog.51cto.com/ddvcxj/265203
本文详细解析了Java中protected修饰符的作用范围及其访问规则。通过具体实例展示了子类如何访问父类的protected成员,强调了子类访问权限的限制,并解释了不同子类间访问protected成员的限制。

2063

被折叠的 条评论
为什么被折叠?



