我有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 语句是合法的。我的猜测是这是合法的,因为
- name 在 Person 中受到保护,emily 是扩展 Person 的员工。所以 emily.name 是合法的;和
- Person 与 Test 在同一个包中。所以我们可以在 Test 类中访问 name。
我的猜测正确吗?