从子类更改超类实例变量的值

时间:2013-10-29 18:44:06

标签: java inheritance subclass superclass

我发现我可以在子类中这样做:

ParentClass.variable = value;

但我被告知最好使用get / set方法,而不是直接访问类外的变量。虽然这是因为我在另一个类中有一个类的实例,而不是子类和超类。

那么有更好的方法吗?通常认为哪种方式是最佳做法?

5 个答案:

答案 0 :(得分:4)

你有很多选择。

  1. super.field = x您必须有权访问该字段才能执行此操作
  2. field = x您必须有权访问该字段才能执行此操作。您也不能在孩子身上再设置field,否则只会设置孩子。
  3. setParentField(x)我认为这是第二种最佳方式。
  4. x = callChildMethod()此代码可以在父代中。子进程具有返回结果的实现。如果可以的话,这是最好的方法。请参阅template method pattern

答案 1 :(得分:0)

对于实例变量,您可以在子类的方法中执行以下操作:

this.variable = value;

这很好。要修改其他类的实例,最好使用getter和setter。

确实应该阻止其他类直接修改实例变量;在这种情况下,最好使用getter和setter。但是在子类中,您可以直接修改实例变量。

答案 2 :(得分:0)

你最好的做法是使用getter和setter。更多INFO

你可以使用,

ParentClass.variable = value;

最佳解决方案取决于要求。

答案 3 :(得分:0)

如果超类中有任何私有成员,则使用setter和getter方法,因为我们不能在其子类中使用私有成员。

如果是任何静态实例成员,您可以在类名的帮助下直接使用。如果它是超类的实例成员,则尝试使用 super 关键字访问/修改子类中的该成员。您可以在关键字的帮助下进行修改,如果您在超类和具有相同名称的子类中拥有实例成员,该怎么办? 然后在这种情况下,使用这个关键字,JVM将访问当前的类实例成员,即子类成员。

答案 4 :(得分:-1)

OOP原则之一是encapsulations拥有最佳实践代码,拥有私有成员/变量,然后使用setter / getters访问它们是实现封装的方法。