无法访问同一个包

时间:2016-04-01 15:42:33

标签: java default visibility private jls

假设我有一个带有包可访问成员的基类:

package testcase;

public class B
{
    int b;
}

它有一个子类:

package testcase.sub;

import testcase.B;


public class C
    extends B
{   
    int c;
}

现在我需要从定义字段的同一个包中访问成员字段:

package testcase;

import testcase.sub.C;


public class A
{

    void testcase( C c )
    {
        c.c = 0;             // HINT
        ( (B) c ).b = 1;     // FIRST
        c.b = 2;             // SECOND
    }

}

编辑:我完全理解A无法访问c.c以及标记为HINT的行无法编译的原因:C.c仅对代码中的代码可见C.c testcase.sub包中A包含testcase时的同一个包。

但是AB.b都在testcase包中,那么为什么第一个分配编译,而第二个分配不呢?

1 个答案:

答案 0 :(得分:2)

C无法访问B.bB.b是包级别权限,B位于testcase包中但{{1}在} C包中。这些不是相同的包,因此testcase.sub没有C字段。