Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使数据成员仅对类和子类可访问_Java - Fatal编程技术网

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完全是个新手,所以我试图理解这种语言的思维方式,而不仅仅是语法。:)