2
Modifier    Class   Package Subclass    World
public      Y          Y       Y           Y
protected   Y          Y       Y           N
no modifier Y          Y       N           N
private     Y          N       N           N 

没有修饰符(默认修饰符)只能从同一个包访问,而不能从子类访问。

如果子类在同一个包中怎么办?子类可以访问它吗?

4

2 回答 2

2

如果子类在同一个包中怎么办?子类可以访问它吗?

是的。“而不是子类”只是“子类不能自动访问它” - 它不像是明确阻止子类访问它。

有关详细信息,请参阅Java 语言规范第 6.6 节。尤其:

否则,我们说有默认访问,只有当访问发生在声明类型的包内时才被允许。

于 2012-12-15T09:24:31.257 回答
1

没有修饰符(默认修饰符)只能从同一个包访问,而不能从子类访问。

是的,它是可访问的,在同一个包中的所有类中都不能访问修饰符(默认修饰符)。

    pkg1;
    class CWithDefAccess{
    }

    pkg1;
    public class anotherclass {
       //can access CWithDefAccess as they are in the same package
    }

    pkg1;
    public class Foo extends CWithDefAccess {
    //can access CWithDefAccess as they are in the same package
    }

    pkg1; 
    public class Baz extends anotherClass{
    //can access CWithDefAccess as they are in the same package
    }
于 2012-12-15T09:24:41.413 回答