2015-09-17 2 views
3

Таким образом, есть два класса, определяемые как:Является ли подкласс всегда в том же пакете, что и суперкласс в Java?

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) недоступен из подкласса, если он находится в другом пакете. В вашем случае - оба класса находятся в одном каталоге, что неявно означает, что они находятся в одном пакете.

+0

За исключением того, что у его вопроса был более общий взгляд на классы, они публичны в его случае, поэтому вопрос был более общим. –

+0

@YassinHH видимость этого класса вне этого контекста. Единственная проблема этого вопроса - видимость переменной 'count'. – alfasin

+0

Он выбирает пример переменной, чтобы вызвать общий вопрос. Но что бы то ни было ... Все еще нисходящее я думаю .. –

2

Нет, подкласс может быть в другом пакете, чем его суперкласс.

Сложно сказать только из фрагмента кода, но я предполагаю, что весь ваш образец кода находится в одном файле? Если это так, то оба класса будут быть в одном пакете. И если вы не указали package в верхней части файла, то это «пакет по умолчанию», к которому они оба принадлежат.

Если вы должны были разделить эти два класса на разные файлы и разместить их в разных пакетах, вы найдете то, что ожидаете: SubClass больше не сможет получить доступ к полю, определенному в SuperClass.

+0

Смотрите мой комментарий к YassinHH. – alfasin

+0

Я не следую. Я сказал, что он не может получить доступ к полю в SuperClass из 'SubClass', если они находятся в разных пакетах. Почему голос? –

+1

Я отложил нижний план, но обратите внимание, что ваш ответ не ясен, так как вы начинаете с «Нет, они могут быть в разных пакетах». что неверно, если он хочет иметь доступ к этой переменной. – alfasin

Смежные вопросы