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的可见性无关(或者在本例中没有),但我多次查看该示例,仍然认为这与问题不符。@ElliottFrischC
甚至没有尝试访问B.B
<代码>A
可以。而A
应该有权访问B.B
,这是有权限的,否则它在铸造后将无法工作。。。