如何使数据成员只能访问类和子类

时间:2011-03-23 13:25:32

标签: java

  

可能重复:
  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中使用这样的访问级别不是一个好主意?

2 个答案:

答案 0 :(得分:8)

设计原则是开发人员不会恶意破解他们自己的程序。如果您不相信同一个包中的类表现正常,那么您就会遇到严重的非技术问题。

访问修饰符用于限制意外错误,并且它们尝试以最小的复杂性停止大多数错误。

BTW:通过反射/ JNI调用,您可以绕过所有访问修饰符,因此它们不是坚如磐石的安全措施恕我直言。

答案 1 :(得分:2)

C ++没有内置包的概念,所以在比较c ++和Java之间的访问修饰符时,你应该忽略'Package'列:)