【问题标题】:subclass needs access to private attribute of abstract superclass子类需要访问抽象超类的私有属性
【发布时间】:2010-12-21 16:44:26
【问题描述】:

我有一个抽象的 java 类,它实现了它的几个方法,但没有实现其他方法。在它实现的方法中,它使用一个私有属性变量。使用的变量也需要在子类中使用。

在我看来,我的选择是:

  • 在子类和超类中声明私有变量
  • 将抽象类中当前实现的方法的实现推迟到子类中

还有其他选择吗?哪个更有意义?为什么?

【问题讨论】:

    标签: java abstract-class private


    【解决方案1】:

    问题是您希望如何维护您的状态:如果不关心值的存储位置,您可以在另一个“顶部”添加一个 private 成员并使用它而不是一个在超类中。如果你想让你的超类中的一些方法和你的子类中的一些方法访问相同的状态,你需要改变可见性:

    您可以将变量声明为protected,使其在子类中可访问,或实现访问器方法,甚至使其成为public

    【讨论】:

    • 这更有意义,因为我需要维护变量的状态。谢谢
    【解决方案2】:

    希望抽象类的设计使您不需要访问私有字段。至于你使用的两种方法中的哪一种,这完全取决于抽象类和你的子类是什么以及它们应该做什么。

    如果您只需要对该变量的读取权限并且超类方法不修改它,您可以将另一个(完全独立的)同名/类型的私有字段添加到您的子类。如果您试图通过更改字段来修改超类方法的行为,您将不得不重写这些方法。

    【讨论】:

      猜你喜欢
      • 2020-08-31
      • 1970-01-01
      • 2023-03-03
      • 2013-03-24
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多