我发现,我能做到这样,在子类:从子类更改父实例变量的值
ParentClass.variable = value;
但有人告诉我,这是更好的做法是使用get /设置方法并且不能直接访问类之外的变量。虽然这是为了当我在另一个类中有一个类的实例,而不是为了子类和超类。
那么有没有更好的方法来做到这一点,哪种方式通常被认为是最佳做法?
我发现,我能做到这样,在子类:从子类更改父实例变量的值
ParentClass.variable = value;
但有人告诉我,这是更好的做法是使用get /设置方法并且不能直接访问类之外的变量。虽然这是为了当我在另一个类中有一个类的实例,而不是为了子类和超类。
那么有没有更好的方法来做到这一点,哪种方式通常被认为是最佳做法?
您有很多选择。
super.field = x
你必须有访问现场要做到这一点field = x
你必须有接入到外地去做到这一点。您也不能在孩子中拥有另一个field
,或者只有孩子会被设置。setParentField(x)
我想说这是做到这一点的第二好方法。x = callChildMethod()
此代码可以在父代中。孩子有返回结果的实现。如果这是可能的,这是最好的办法。见template method pattern实例变量,你可以做以下的在子类中的方法:
this.variable = value;
这是完全正常的。要修改其他类的实例,最好使用getters和setter。
的确,您应该防止其他类直接修改实例变量;在这种情况下,最好使用getter和setter。但是在一个子类中,你可以直接修改实例变量。
的OOP原则之一是encapsulations
拥有最佳实践的代码,并具有专有的成员/变量,然后用setter方法访问它们/干将是实现封装的方式。
如果在超类中有任何私有成员,那么使用setter和getter方法是因为我们不能在其子类中使用私有成员。
如果有任何静态实例成员,可以直接使用类名的帮助。如果它是超级类的实例成员,则尝试使用super关键字访问/修改该子类中的该成员。你可以在这个关键字的帮助下修改,如果你在超类和子类中有同名的实例成员? 然后在这种情况下,使用这个关键字JVM将访问当前的类实例成员,即子类成员。
最好使用get/set方法,而不是直接访问类外的变量。 – Ingo
这似乎是相关的:http://stackoverflow.com/questions/19658621/update-fields-from-superclass/19658722#19658722 – MadConan
考虑在父母上创建一个受保护的getter。 – shmosel