在不止一次的情况下,我发现自己希望获得Java中无法实现的可变可见性。我希望某些成员在他们自己的班级和任何子班级中可见,但对于包的其余部分或世界其他地方不可见。换句话说,我想要这样:
Modifier Class Package Subclass World
sub-class Y N Y N
但是,Java的设计师只给了我这个:
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
我想要这样的典型情况是在创建抽象类时。有时我发现抽象的父母需要访问某些成员,但是具体的孩子也需要访问。我可以通过成为成员来给他们这种访问权限protected
,但这在我真的不想要的时候打开了对包其余部分的访问权限。
为了完全清楚,我知道这样的修改是不是可以在Java中。我的问题是为什么Java中不包含这样的修饰符?在我看来,这比protected
默认值或默认值更自然。仅仅是因为它的原因不够重要,还是与我未曾考虑过的可能的副作用更相关?