所以定义了两个类:
public class SuperClass {
int count = 5;
SuperClass() {
}
}
public class SubClass extends SuperClass {
SubClass() {
super();
}
SubClass sub = new Subclass();
System.out.println(sub.count); // prints out 5
除非我对默认可见性修饰符的理解是错误的,否则我认为默认修饰符是只有相同包中的类才能访问变量计数。所以这意味着我的SubClass与我的SuperClass在同一个包中,但是我没有指定它们在我的代码中的任何地方都在同一个包中。这是否意味着SubClass始终与SuperClass在同一个包中?
答案 0 :(得分:6)
您是对的:如果子类位于另一个包中,则无法从子类访问默认访问修饰符(也称为package-private)。在您的情况下 - 两个类都在同一个目录中,隐含意味着它们在同一个包中。
答案 1 :(得分:2)
不,子类可以在与其超类不同的包中。
很难说您的代码片段,但我假设您的所有示例代码都在一个文件中?如果是这种情况,则两个类将位于同一个包中。如果您没有在文件顶部指定package
,那么它们都属于它们的“默认包”。
如果您要将这两个类分成不同的文件并将它们放在不同的包中,您会发现您的期望:SubClass
将无法再访问SuperClass
中定义的字段