У меня есть 3 класса, класс Person в пакете A, класс Employee расширяет Person в пакете B, и класс Test в пакете A:
In Person. java:
package A;
public class Person {
protected String name;
...
}
In Employee. java:
package B;
import A.Person;
public class Employee extends Person {
double salary;
...
}
In Test. java:
package A;
import B.Employee;
import java.util.*;
public class Test {
public static void main(String[] args) {
Employee emily = new Employee("Emily", 20000.0);
System.out.println(emily.name);
}
}
Мой вопрос касается заявления println. Изначально, хотя это и незаконно, поскольку Test находится в другом пакете, чем Employee, и Test не расширяет Employee. Поскольку имя защищено, к нему можно получить доступ только из того же пакета или из подкласса.
Однако я скомпилировал и запустил код. Печатное заявление является законным. Я предполагаю, что это законно, потому что
- имя защищено в Персоне, а Эмили является сотрудником, который расширяет Персона. Так что emily.name является законным; и
- Человек находится в том же пакете, что и Тест. Таким образом, мы можем получить доступ к имени в классе Test.
Правильно ли мое предположение?