子类是否始终与Java中的超类在同一个包中?

时间:2015-09-17 02:53:17

标签: java inheritance

所以定义了两个类:

    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在同一个包中?

2 个答案:

答案 0 :(得分:6)

您是对的:如果子类位于另一个包中,则无法从子类访问默认访问修饰符(也称为package-private)。在您的情况下 - 两个类都在同一个目录中,隐含意味着它们在同一个包中。

答案 1 :(得分:2)

不,子类可以在与其超类不同的包中。

很难说您的代码片段,但我假设您的所有示例代码都在一个文件中?如果是这种情况,则两个类位于同一个包中。如果您没有在文件顶部指定package,那么它们都属于它们的“默认包”。

如果您要将这两个类分成不同的文件并将它们放在不同的包中,您会发现您的期望:SubClass将无法再访问SuperClass中定义的字段