【发布时间】:2010-12-21 16:44:26
【问题描述】:
我有一个抽象的 java 类,它实现了它的几个方法,但没有实现其他方法。在它实现的方法中,它使用一个私有属性变量。使用的变量也需要在子类中使用。
在我看来,我的选择是:
- 在子类和超类中声明私有变量
- 将抽象类中当前实现的方法的实现推迟到子类中
还有其他选择吗?哪个更有意义?为什么?
【问题讨论】:
标签: java abstract-class private
我有一个抽象的 java 类,它实现了它的几个方法,但没有实现其他方法。在它实现的方法中,它使用一个私有属性变量。使用的变量也需要在子类中使用。
在我看来,我的选择是:
还有其他选择吗?哪个更有意义?为什么?
【问题讨论】:
标签: java abstract-class private
问题是您希望如何维护您的状态:如果不关心值的存储位置,您可以在另一个“顶部”添加一个 private 成员并使用它而不是一个在超类中。如果你想让你的超类中的一些方法和你的子类中的一些方法访问相同的状态,你需要改变可见性:
您可以将变量声明为protected,使其在子类中可访问,或实现访问器方法,甚至使其成为public。
【讨论】:
希望抽象类的设计使您不需要访问私有字段。至于你使用的两种方法中的哪一种,这完全取决于抽象类和你的子类是什么以及它们应该做什么。
如果您只需要对该变量的读取权限并且超类方法不修改它,您可以将另一个(完全独立的)同名/类型的私有字段添加到您的子类。如果您试图通过更改字段来修改超类方法的行为,您将不得不重写这些方法。
【讨论】: