0

我有3个类,包A中的Person类,包B中的Employee类扩展Person,包A中的Test类:

在 Person.java 中:

package A;
public class Person {
   protected String name;
   ...
}

在 Employee.java 中:

package B;
import A.Person;
public class Employee extends Person {
   double salary;
   ...
}

在 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。由于名称是受保护的,它只能从同一个包或子类中访问。

但是,我编译并运行了代码。println 语句是合法的。我的猜测是这是合法的,因为

  1. name 在 Person 中受到保护,emily 是扩展 Person 的员工。所以 emily.name 是合法的;和
  2. Person 与 Test 在同一个包中。所以我们可以在 Test 类中访问 name。

我的猜测正确吗?

4

0 回答 0