Java-为什么另一个包中的Child无法通过父级引用访问父级的受保护方法?

问题描述 投票:0回答:1

我在两个不同的包中有两个类:

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时会出现NO ERROR,因为ChildClass看到了此方法,因为它继承自ParentClass

并且以某种方式能够理解为什么在调用par.testProtected() -- Line 1时它是throwing ERROR,因为par是一个不同的对象,并且当前对象无法访问其他对象的父级的受保护方法。

但是,当引用类型仅是ChildClass时,ChildClass的对象如何可以访问相同的方法ch.testProtected() -- Line 3(另一个对象的父级的受保护方法?]]

我在两个不同的包中有两个类:package package1;公共类ParentClass {public void testPublic(){} protected void testProtected(){}} package package2; ...

java inheritance package protected access-modifiers
1个回答
0
投票

您看到的错误是完全有道理的。

执行此操作时

© www.soinside.com 2019 - 2024. All rights reserved.