当Child类覆盖受保护的成员时,成员就可以访问了。运营商?

时间:2013-01-15 04:58:37

标签: java core

package xxx.yyy;

public class ParentClass {
    protected void doPrint(){
        System.out.println("Parent.....");
    }
}


package aaa.bbb;

import cathy.inner.ParentClass;

public class Child extends ParentClass {        
    public void getName(){
        System.out.println("Child....");
    }
}

public class ParentClass { protected void doPrint(){ System.out.println("Parent....."); } } package aaa.bbb; import cathy.inner.ParentClass; public class Child extends ParentClass { public void getName(){ System.out.println("Child...."); } } 包aaa.bbb中的客户端无法使用新的Child()。doPrint()。但如果子覆盖,则客户端可以使用新的Child()。doPrint()。 这对我来说似乎很奇怪,因为在覆盖期间我们无法将访问修饰符更改为更具限制性,但这种情况下继承的方法似乎是私有的。

为什么要以这种方式实施?

2 个答案:

答案 0 :(得分:2)

Super类方法的访问修饰符为protected,并且可以使用classpackagesubclass访问该方法。

因此无法在子类的包中访问它。

当您使用subclass访问修饰符覆盖protected中的特定方法时,可以访问它,因为protected方法可以在同一package下访问。

答案 1 :(得分:0)

受保护的只允许子类访问方法...... java的一种限制并不奇怪......