我知道子类除了拥有超级类的公共setter/getter之外,不能访问私有领域。至今我还没有任何面向对象语言的经验。我是否应该将所有字段设置为私有的,并且只需使用公共方法在子类中访问它们,或者让它们受到保护并在子类和包中自由使用?Java对私有领域的影响
回答
使它们成为protected
。这是此关键字存在的唯一目的!
不是。这取决于OP是否在意泄漏内部状态。 – 2015-03-31 20:33:00
子类不继承其父类的私有成员。但是,如果超类具有访问其专用字段的公共或受保护方法,那么这些也可以由子类使用。
嵌套类可以访问其包含的所有私有成员 类 - 这两个字段和方法。因此,由子类继承的公共或受保护的嵌套类可间接访问超类的所有私有成员。
@chancea看看他谈论继承的标题 – 2015-03-31 20:26:00
这不是一个答案。 OP正在问一个设计问题,而不是围绕范围的规则。 – 2015-03-31 20:33:53
在OOP
还有一个特点encapsulation
和encapsulation
强烈建议我们隐藏从外部世界中的数据。而且你可以通过将字段/属性/变量隐藏来隐藏数据。
并且对于访问私有变量使用一些公开的getter
方法。
这取决于您的需求。如果您需要访问子类以及相同的包,请将其设为protected
。
下面是一般规则:
private
:只有一流的访问。
protected
:包访问和派生类。
default
:仅限于相同的包装。
public
:任何人都可以访问它。
- 1. java有什么私人领域?
- 2. Grails中的领域建模如何受领域属性影响?
- 3. 私有方法和领域
- 4. 访问Java中的私人领域
- 5. 唯一性约束不影响领域
- 6. 太多的ORM POJO领域模型类对Java PermGen空间有什么影响?有没有可用的指标?
- 7. Junit的私人领域
- 8. INotifyPropertyChanged的带私人领域
- 9. 私人领域不编译
- 10. 模式与私人领域
- 11. 私人领域是超
- 12. 嘲笑私人领域
- 13. 如何在共享领域创建私有Realm对象
- 14. 投影领域另一场
- 15. 班级和领域的知名度之间的相互影响
- 16. Java领域
- 17. CCLiquid对CCSprite特定区域的影响?
- 18. 如何通过不变的数据影响领域同步?
- 19. 对象可变性对Python的作用域有什么影响?
- 20. 私人领域的垃圾收集
- 21. 私人财产领域的StackOverflow例外
- 22. 摘要Scala的特质私人领域
- 23. Junit的:与私人领域@Autowired
- 24. 私人领域的公共方法
- 25. RequiredAttribute标签上的私人领域
- 26. Python的私人领域与getter方法
- 27. Collections.sort具有多领域的Java
- 28. Javascript:如何保存对象与私人领域的文件?
- 29. 投影创建新的领域
- 30. SpriteBatch.setBlendFunction()对Android没有影响
getter/setter访问在Java中更传统。使对象尽可能少变化也是非常好的做法。经过一年的经验,你会明白为什么。 – 2015-03-31 20:29:01
好吧,让所有的东西都是私人的,甚至在自己的孩子分类器中使用setter getters是一种社会上可以接受的方式? – KrwawyKefir 2015-03-31 20:56:24
如果您制作实用的软件包,当然不需要这么做,但要确保所有这些字段都隐藏在包装以外的直接访问中。 “到处吸收/设置者”更多地是关于JPA,EJB和其他企业内容。 – 2015-03-31 21:05:33