Java 如何使数据成员仅对类和子类可访问
可能重复:Java 如何使数据成员仅对类和子类可访问,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 然而,对于“仅对类和子类可访问”并没
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中拥有这样的访问级别不是一个好主意?设计原则是开发人员不会恶意攻击自己的程序。如果您不相信同一个包中的类能够正常工作,那么IMHO就会出现严重的非技术性问题 访问修饰符用于限制意外错误,它们试图以最小的复杂性阻止大多数错误
BTW:通过反射/JNI调用,可以绕过所有访问修饰符,因此它们不是一个可靠的安全措施。
< P> C++没有内置包的概念,因此当比较C++和java之间的访问修饰符时,你应该忽略“包”列:)/P>在java中,开发人员不会恶意地窃取他们自己的程序,而C++中的程序是这样做的:java是C++的一个模仿特性。例如,java甚至不支持签名的int,但是C++开发人员似乎发现它有用。基本上,如果对某个功能是否真的有用有任何疑问,它不会被包括在内。(例如,甚至Java 7也没有计划闭包)不幸的是,Java不能满足提问者的要求。我不使用范围来阻止坏人攻击我,我使用范围来阻止我错误地攻击自己。受保护并不保护我):@aioobe谢谢你找到了那条线索。我找了一些类似的东西,但不知为什么找不到。那里的答案很有教育意义+是的,我知道。我对Java完全是个新手,所以我试图理解这种语言的思维方式,而不仅仅是语法。:)