对于多态类,使用受保护的实例变量是否可以?

时间:2016-11-13 03:06:53

标签: java polymorphism

我有一个名为Seat的超类(用于音乐厅)。

GoldSeatSilverSeatBronzeSeat是其子类。

我一直在阅读以保留数据private以便启用封装。

如果我需要编写在子类中使用这些实例变量的方法,那么将它们protected视为可接受吗?大多数类似的堆栈溢出问题都没有解决正确的面向对象设计问题,而是关注访问修饰符与处理效率或每个技术差异之间的差异。如果我错过了一个,我会提前道歉,并乐意回顾它。

我可以在子类中使用getter方法来获取实例变量,但在这种情况下这似乎很奇怪,但至少数据是private

2 个答案:

答案 0 :(得分:1)

调用自己的访问器方法并不“奇怪”。它实际上很有意义。如果你的访问器方法包含的代码超出了简单的设置/获取它们,你肯定想要调用它们。 也许重新考虑你对'纯'OO的厌恶。 当然,它保持封装。

答案 1 :(得分:1)

  

认为保护它们是否可以接受?

是。当你使用protected修饰符时,我认为它不会违反封装法则。只允许子类访问实例,我们仍然控制其他人应该访问的内容以及谁可以访问实例。

  

我可以在子类中使用getter方法来获取实例   变量,但在这种情况下似乎很奇怪

在某些情况下,您希望在其他人可以访问实例之前进行一些预处理,您可以将预处理放在Getter中。