从子类更改超类实例变量的值
我发现我可以在子类中这样做:
ParentClass.variable = value;
但我被告知最好使用get / set方法,而不是直接访问类外的变量。 虽然这是因为我在另一个类中有一个类的实例,而不是子类和超类。
那么有没有更好的方法来做到这一点,哪种方式通常被认为是最佳实践?
你有很多选择。
-
super.field = x
您必须有权访问该字段才能执行此操作 -
field = x
您必须有权访问该字段才能执行此操作。 你也不能在孩子身上有另一个field
,或者只设置孩子。 -
setParentField(x)
我想说这是第二种最好的方法。 -
x = callChildMethod()
此代码可以在父代。 子进程具有返回结果的实现。 如果这是可能的,那么这是最好的方法。 请参阅模板方法模式
对于实例变量,您可以在子类的方法中执行以下操作:
this.variable = value;
这很好。 要修改其他类的实例,最好使用getter和setter。
确实应该阻止其他类直接修改实例变量; 在这种情况下,最好使用getter和setter。 但是在子类中,您可以直接修改实例变量。
你最好的做法是使用getter和setter。 更多信息 。
您可以使用,
ParentClass.variable = value;
最好的解决方案取决于要求。
如果超类中有任何私有成员,则使用setter和getter方法,因为我们不能在其子类中使用私有成员。
如果是任何静态实例成员,您可以在类名的帮助下直接使用。 如果它是超类的实例成员,则尝试使用super关键字访问/修改子类中的该成员。 您可以在此关键字的帮助下修改,如果您在超类和具有相同名称的子类中拥有实例成员,该怎么办? 然后在这种情况下,使用此关键字JVM将访问当前类实例成员即子类成员。
OOP原则之一是具有最佳实践代码的encapsulations
,并且具有私有成员/变量,然后使用setter / getters访问它们是实现封装的方式。