在Java中,子类和超类总是在同一个包中吗?

在Java中,子类和超类总是在同一个包中吗?,java,inheritance,Java,Inheritance,因此,有两类被定义为: public class SuperClass { int count = 5; SuperClass() { } } public class SubClass extends SuperClass { SubClass() { super(); } SubClass sub = new Subclass(); System.out.print

因此,有两类被定义为:

    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

除非我对默认可见性修饰符的理解是错误的,否则我认为默认修饰符是只有相同包中的类才能访问变量count。这意味着我的子类和我的超类在同一个包中,但我没有指定它们在代码中的任何地方都在同一个包中。这是否意味着子类始终与超类位于同一个包中?

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

否,子类可以位于与其超类不同的包中

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


如果您将这两个类划分为不同的文件并将它们放在不同的包中,您会发现您所期望的:
子类
将不再能够访问在
超类
中定义的字段

您是否在两个不同的文件中定义了这两个类?如果是的话,你把它们放在哪一个包里了?请看我对Yassinh的评论。我不明白。我说他不能从
子类
访问
超类
中的字段,如果它们在不同的包中。为什么投反对票?我收回了反对票,但请注意,你的答案并不清楚,因为你以“不,它们可以在不同的包中”开头。如果他想访问该变量,这是不正确的。谢谢。我编辑了第一句来澄清。我回答的问题是:
子类是否总是与Java中的超类在同一个包中?
除了他的问题有更一般的范围外+看看类,在他的情况下它们是公共的,所以问题更一般。@YassinHH类的可见性不在此上下文中。这个问题唯一关心的是变量
count
的可见性。他选择变量的示例来提出一般性问题。但不管怎样。。。我猜你还是投了反对票。@yassinh如果你想赶上来,请阅读访问修饰符(上面的答案中有链接),然后再次阅读他的问题。