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

an0*_*00b 4 java

可能重复:
为什么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
Run Code Online (Sandbox Code Playgroud)

但是,对于"仅对类和子类可访问",没有修饰符.那是:

Modifier    Class  Package Subclass World
c++prot     Y      N       Y        N
Run Code Online (Sandbox Code Playgroud)

是否有可能在Java中定义这样的访问级别?

如果是这样,怎么样?

如果不可能,这必须归功于深思熟虑的设计原则.如果是这样,那个原则是什么.换句话说,为什么在Java中使用这样的访问级别不是一个好主意?

Pet*_*rey 8

设计原则是开发人员不会恶意破解他们自己的程序.如果你不相信同一个包中的类表现正常,你就会有严重的非技术问题恕我直言.

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

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

  • 那么在Java中,开发人员不会恶意破解他们自己的程序,而在C++中他们会这样做?:) (5认同)
  • 不幸的是,Java 无法满足请求者的要求。我不使用范围来防止坏人攻击我,我使用范围来防止我错误地攻击自己。受保护并不能保护我): (2认同)