对于上述层次结构,以下是pkg1
,
package ProtectedAccess.pkg1;
public class T {
protected int f;
protected void m(){
}
}
以下是来自pkg2
的代码,其中test2
通过将X
替换为类T
或A
或B
或{来测试{1}}或C
或S
或D
或E
或F
或G
。
H
-
1)
如果package ProtectedAccess.pkg2;
import ProtectedAccess.pkg1.*;
class A extends T {}
class B extends T{}
class C extends B{}
public class S extends B{
void test1(){
f = 42;
m();
}
void test2(X t){
t.f = 42;
t.m();
}
}
class D extends S{}
class G extends D{}
class E extends S{}
class H extends E{}
class F extends S{}
替换为X
或T
或A
或B
,则编译错误。
2)
如果C
替换为X
或S
或D
或E
或F
或G
,则事情代码可以正常运行
我如何理解上述两个场景的工作原理?请帮忙!!!