Java 无法访问同一包中类的成员

Java 无法访问同一包中类的成员,java,default,visibility,private,jls,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 c

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

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
以及为什么标记为提示的行不编译:
c.c
仅对同一包中的代码可见,而
c.c
在包
testcase中。sub
A
testcase>中


但是
A
B.B
都在包
testcase
中,那么为什么第一个赋值要编译,而第二个赋值不编译?
C
没有访问
B.B
的权限,
B.B
是包级权限,
B
testcase
包中,而
C
testcase.sub
包中。它们不是同一个包,因此
C
没有
b
字段。

是A,B和C在同一个包中?是什么让你认为
testcase
testcase.sub
是同一个包?@Raedwald每个类都有它的包声明。
A
B
都在
testcase
中,我不同意这个问题是重复的。我知道访问修饰符的一般含义,但这是一个非常具体的问题,与大多数修饰符的定义相矛盾。如何将问题标记为非重复问题?JLS的强制性链接:(参见示例6.6-4)
B.B
是包级别,而
A
在同一个包中……是的,但是
C
没有访问
B.B
的权限,因此
C
中没有
B
。尽管
A
B
的可见性与
C
B.B
@Thomas的可见性无关(或者在本例中没有),但我多次查看该示例,仍然认为这与问题不符。@ElliottFrisch
C
甚至没有尝试访问
B.B
<代码>A
可以。而
A
应该有权访问
B.B
,这是有权限的,否则它在铸造后将无法工作。。。