4
A
回答
14
字段是实现细节 - 它们通常不应被视为API的一部分 - 通过这种方式您可以更改后面的事情。如果你使一个字段受保护,它将可用于子类,而不是只能看到他们可以依赖的API的子类。
如果您想限制哪些值在以后的日期对该字段有效,该怎么办?当它受到保护时,你不会得到任何验证或类似的东西。子类可以把任何旧垃圾放在那里。如果您保持私密并提供受保护的setter方法,则可以应用适当的验证。
简而言之:将您的客户 - 通过子类别视为客户,就像您的客户通过呼叫一样。给他们一个API来处理,并保持你的实现细节是私人的。
3
大多数时候,当我创建继承时,我确保所有变量都是私有的。每当继承类想要从超类中获得某些东西时,他就可以使用getter方法获取值。
如果每个人都可以以硬核方式获取和设置变量,那么当设置该变量时,无法依赖应该运行的额外代码。超级班正在放弃自己的责任。
+0
我喜欢你把它放在“硬核方式”的方式......:P –
0
它的继承的概念。如果A类从类B继承,那么它可以访问受保护的变量和函数。因此,如果您不想授予其他任何课程的访问权限,请继续并将其声明为“私人”。
相关问题
- 1. 为什么我不应该继承UIButton?
- 2. 为什么变量名称应该被声明为“错误?
- 3. 我的变量应该声明为什么类型?
- 4. 这个未声明的变量应该是什么类型?
- 5. 为什么我不能在保护类型的同一个包中声明一个共享变量?
- 6. 为什么Applicative应该继承Functor?
- 7. 为什么不能声明一个也继承的通用基类?
- 8. 为什么我不能声明一个表变量和其他声明?
- 9. 什么是C++声明一个变量不变的点
- 10. 为什么Finalize应该被保护?
- 11. 应该声明一个锁定变量是否为volatile?
- 12. 模板类不从另一个模板类继承受保护的变量
- 13. 单元测试:不能继承受保护的变量
- 14. 为什么我不能继承这个变量?
- 15. 为什么我应该在声明一个变量时指定nil而不是给它一个基值?
- 16. CSS继承 - 为什么后面的声明被'早期'声明覆盖?
- 17. 如何使一个类继承保护?
- 18. 为什么在javascript中留下一个未声明的变量?
- 19. 为什么我必须重新声明一个继承类的虚函数?
- 20. Scss:Selector继承:删除一个声明
- 21. 为什么受保护的继承导致dynamic_cast失败?
- 22. 为什么我的一个变量不需要声明而另一个呢?
- 23. 什么是受保护的,一旦一个对象声明为const C++
- 24. 为什么不声明每个变量都是静态的
- 25. 变量声明:为什么接口
- 26. 什么时候应该在PHP类中声明变量?
- 27. 为什么没有在头文件中声明该变量?
- 28. 为什么共享继承的数组和一个普通变量不是?
- 29. 为什么在声明时给变量赋一个空值?
- 30. 什么行应该被取消注释,为什么,继承
除此之外,请注意,如果您需要阻止来自外部客户端的访问,但允许访问子项,则可以使您的getter和setter受到保护。 – IanGilham
感谢乔恩,我收到了消息。 –