我有一个名为Seat
的超类(用于音乐厅)。
GoldSeat
,SilverSeat
和BronzeSeat
是其子类。
我一直在阅读以保留数据private
以便启用封装。
如果我需要编写在子类中使用这些实例变量的方法,那么将它们protected
视为可接受吗?大多数类似的堆栈溢出问题都没有解决正确的面向对象设计问题,而是关注访问修饰符与处理效率或每个技术差异之间的差异。如果我错过了一个,我会提前道歉,并乐意回顾它。
我可以在子类中使用getter方法来获取实例变量,但在这种情况下这似乎很奇怪,但至少数据是private
。
答案 0 :(得分:1)
调用自己的访问器方法并不“奇怪”。它实际上很有意义。如果你的访问器方法包含的代码超出了简单的设置/获取它们,你肯定想要调用它们。 也许重新考虑你对'纯'OO的厌恶。 当然,它保持封装。
答案 1 :(得分:1)
认为保护它们是否可以接受?
是。当你使用protected
修饰符时,我认为它不会违反封装法则。只允许子类访问实例,我们仍然控制其他人应该访问的内容以及谁可以访问实例。
我可以在子类中使用getter方法来获取实例 变量,但在这种情况下似乎很奇怪
在某些情况下,您希望在其他人可以访问实例之前进行一些预处理,您可以将预处理放在Getter中。