Uri*_*Uri 43 java inheritance protected
在Java中,具有"受保护"修饰符的成员不仅可以由同一个类和子类访问,还可以由同一个包中的每个人访问?
我想知道语言设计的原因,而不是实际的应用程序(例如,测试)
Ale*_*lli 23
这种设计基于这样的想法:包装是适当的单元,由一个内部一致的团队维护和发布; 继承关系与谁维护和释放什么时候关系不大.
Gle*_*enn 23
修饰符在http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html中有详细描述.从那里我们看到这个数字.
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)
由此可见设计决策的原因很明显:它有一个很好的对称矩阵.
Tom*_*ine 14
在Java 1.0中,有第五个访问修饰符:private protected.这protected没有默认访问权限.显然它从来没有真正正常工作,并在1.1中被删除.因此看起来像是protected按照总排序的方式定义的声明似乎是虚假的.(编辑:看来,在1.1中删除第五个访问修饰符的原因中至少有一个原因是缺少总排序干扰了重载选择规则.)moduleJava 7中的访问修饰符在这方面有一些设计问题.
鉴于人们认为成员的默认访问修饰符为"包私有"是一个好主意,因此protected至少应该具有这种访问级别似乎是合理的.对于我的钱,protected根本不用语言支付.
基本上它与包作为api控制单元的视图有关(因此建议使用您的域名启动您的包 - 保证全局唯一性),因此可见性从私有 - > package-private - > protected - > public .如果受保护不是增加包私有,而是增加不同类型的可见性,则必须有某种方式在需要时组合两种类型的可见性.
| 归档时间: |
|
| 查看次数: |
7453 次 |
| 最近记录: |