Access Inherited Protected переменная вне пакета в Java - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть 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. Поскольку имя защищено, к нему можно получить доступ только из того же пакета или из подкласса.

Однако я скомпилировал и запустил код. Печатное заявление является законным. Я предполагаю, что это законно, потому что

  1. имя защищено в Персоне, а Эмили является сотрудником, который расширяет Персона. Так что emily.name является законным; и
  2. Человек находится в том же пакете, что и Тест. Таким образом, мы можем получить доступ к имени в классе Test.

Правильно ли мое предположение?

...