可能重复:
Why is there no sub-class visibility modifier in Java?
Java的访问级别表显示了4种不同的选项,用于控制对类成员的访问:
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
但是,“仅对类和子类可访问”没有修饰符。那就是:
Modifier Class Package Subclass World
c++prot Y N Y N
是否有可能在Java中定义这样的访问级别?
若然,怎么样?
如果无法做到这一点,这必须归功于深思熟虑的设计原则。如果是这样,那个原则是什么。换句话说,为什么在Java中使用这样的访问级别不是一个好主意?
答案 0 :(得分:8)
设计原则是开发人员不会恶意破解他们自己的程序。如果您不相信同一个包中的类表现正常,那么您就会遇到严重的非技术问题。
访问修饰符用于限制意外错误,并且它们尝试以最小的复杂性停止大多数错误。
BTW:通过反射/ JNI调用,您可以绕过所有访问修饰符,因此它们不是坚如磐石的安全措施恕我直言。
答案 1 :(得分:2)
C ++没有内置包的概念,所以在比较c ++和Java之间的访问修饰符时,你应该忽略'Package'列:)