不止一次,我发现自己渴望一个可变的可见性,这是不可能在Java。我想要某些成员在他们自己的类和任何子类中可见,而不是在包的其余部分或世界其他地方。换句话说,我想这样:
Modifier Class Package Subclass World
sub-class Y N Y N
然而,Java的设计师只给了我this:
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
典型的情况下,当我想要这样的东西是创建一个抽象类。有时我发现抽象父需要访问某些成员,但具体的孩子也是如此。我可以通过使成员受到保护给他们这个访问,但打开了对其余的包的可访问性,当我真的不想。
要完全清楚,我知道这样的修改器是不可能在Java。我的问题是为什么这样的修饰符不包括在Java?它似乎(对我)是一个比保护或默认更自然的可见性级别。是否原因只是沿着它的线不是足够重要被包括,或更多与我没有考虑的可能的副作用相关?