我有两个不同包中的类:
package package1;
public class ParentClass {
public void testPublic() {
}
protected void testProtected() {
}
}
package package2;
import package1.ParentClass;
public class ChildClass extends ParentClass {
void test() {
ParentClass par = new ParentClass();
par.testProtected(); // Line 1 : ERROR: testProtected() has protected access in ParentClass
testProtected(); // Line 2 : No error
ChildClass ch = new ChildClass();
ch.testProtected(); // Line 3 : No ERROR
testProtected(); // Line 4 : No error
}
}
我能理解为什么在调用testProtected() -- Line 2
时没有错误,因为ChildClass
继承自ParentClass
,可以看到这个方法。
我也能够理解为什么在调用par.testProtected() -- Line 1
时会抛出错误,因为par
是一个不同的对象,当前对象不能访问其他对象的父类受保护的方法。
但当引用类型为ChildClass时,对象如何访问同一方法ch.testProtected() -- Line 3
(其他对象的父类受保护的方法)呢?