继承领域最有效的方法?

时间:2011-05-27 13:59:53

标签: java

考虑一个由根类和一些子类组成的特定类层次结构

    R
    |
 .--+--+------.
 |     |  ... |
S1     S2 ... Sn

类R有一个特定类型的字段x,比如X,它不是一个简单的类型,每个子类都应该继承。子类可以对字段x执行各种内部处理,也可以将其作为属性公开。 关于这两种编码风格中哪一种更受欢迎的讨论产生了一些讨论:

第一解决方案

让课程Rx声明为私有字段并提供公共getter和setter

class R {
    ....
    private X x;

    ....

    public X getX() { ... }
    public void setX(X ax) { ... }
}

第二种解决方案

让课程Rx声明为受保护的字段

您认为哪一个可能是首选解决方案?

4 个答案:

答案 0 :(得分:3)

如果您希望子类访问受保护的变量。您希望您的子类使用方法来修改它,然后将其设为私有。

所有人都依赖于你想要其他课程的访问权。

编辑:(第一个解决方案)

答案 1 :(得分:1)

如果必须使用继承,这是最安全的方法:

class R
{
  private X x;

  protected X getX()
  {
    return this.x;
  }
}

为什么不将R作为单独的类并从S1, S2, ... Sn引用它?

答案 2 :(得分:1)

这取决于你想要允许对内部X做什么。如果你想让它可以从外部访问/修改make public get / set。但是如果你希望它们只能通过它的子类进行修改,那么就使用protected,这就是全部。 IMHO

答案 3 :(得分:0)

私人领域更可取。但是,即使它是子类,也不应该从另一个类中更改另一个对象的内部状态。

听起来好像在R,S1,S2等X和X之间插入了巨大的耦合。更好地考虑替代的面向对象设计,明确地在对象之间分配责任。

考虑在继承子类之前查看Liskov替换原则。