Может кто-нибудь объяснить это поведение? Это ошибка, или я пропущу что-то очевидное?Java-Access Speficier
1) Создайте 2 пакета, скажем pack1 и pack2 в том же каталоге.
2) В pack1 создать класс X
package pack1;
import pack2.*;
public class X
{
void eat()
{
System.out.println("X eat");
}
public static void main(String args[])
{
X x = new Y();
x.eat(); //accessing eat() method on Instance of Y.
//But since eat() is not public or protected its visibility must be limited to class X
System.out.println("Done");
}
}
3) Теперь в Pack2 создать класс Y
package pack2;
import pack1.*;
public class Y extends X
{
}
Метод поесть не должен быть доступен для класса Y, как это имеет ' default ", который ограничивает его видимость объявленного пакета (пакет X). Таким образом, этот метод не должен быть доступен в классе Y. Но когда я компилирую и выполняю этот код, он отлично работает. Разве это не является нарушением спецификатора доступа по умолчанию?
Также, если я изменил X x = новый Y() на Y x = новый Y(), компиляция завершится неудачно !!
В дубликате замените 'private' на' package private' для ответа. Доступность определяется на основе статического типа выражения, к которому вызывается метод. В вашем случае 'X', а не' Y'. –