繁体   English   中英

继承领域最有效的方法?

[英]Most efficient approach in inherited fields?

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

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

Class R 有一个特定类型的字段x ,比如说X ,这不是一个简单的类型,每个子类都应该继承。 子类可以对字段x进行各种内部处理,并将其作为属性公开。 关于这两种编码风格中哪一种更可取的讨论出现了:

第一种解决方案

让 class R x声明为私有字段并提供公共 getter 和 setter

class R {
    ....
    private X x;

    ....

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

第二种解决方案

让 class R x声明为受保护字段

在您看来,哪一个可能是更可取的解决方案?

如果您希望您的子类可以访问该变量,请受保护。 如果您希望您的子类使用方法对其进行修改,然后将其设为私有。

所有这些都取决于您希望其他课程拥有的访问权限。

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

如果您必须使用 inheritance 这是最安全的方法:

class R
{
  private X x;

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

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

这取决于您希望允许对内部 X 执行什么操作。如果您希望它可以从外部访问/修改,请公开获取/设置。 但是,如果您希望它们只能通过其子类进行修改,那么使用 protected 就可以了。 恕我直言

私有字段更可取。 但是,无论如何,您都不应该从另一个 class 更改另一个 object 的内部 state,即使它是一个子类。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM