[英]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.