2013-10-29 39 views
5

我发现,我能做到这样,在子类:从子类更改父实例变量的值

ParentClass.variable = value; 

但有人告诉我,这是更好的做法是使用get /设置方法并且不能直接访问类之外的变量。虽然这是为了当我在另一个类中有一个类的实例,而不是为了子类和超类。

那么有没有更好的方法来做到这一点,哪种方式通常被认为是最佳做法?

+3

最好使用get/set方法,而不是直接访问类外的变量。 – Ingo

+0

这似乎是相关的:http://stackoverflow.com/questions/19658621/update-fields-from-superclass/19658722#19658722 – MadConan

+0

考虑在父母上创建一个受保护的getter。 – shmosel

回答

2

您有很多选择。

  1. super.field = x你必须有访问现场要做到这一点
  2. field = x你必须有接入到外地去做到这一点。您也不能在孩子中拥有另一个field,或者只有孩子会被设置。
  3. setParentField(x)我想说这是做到这一点的第二好方法。
  4. x = callChildMethod()此代码可以在父代中。孩子有返回结果的实现。如果这是可能的,这是最好的办法。见template method pattern
0

实例变量,你可以做以下的在子类中的方法:

this.variable = value; 

这是完全正常的。要修改其他类的实例,最好使用getters和setter。

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

-1

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

0

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

可以使用,

ParentClass.variable = value; 

最好soltion取决于需求。

0

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

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