我发现我可以在子类中这样做:
ParentClass.variable = value;
但有人告诉我,最好使用 get/set 方法,而不是直接访问类外的变量。虽然这是当我在另一个类中有一个类的实例时,而不是子类和超类。
那么有没有更好的方法来做到这一点,哪种方法通常被认为是最佳实践?
我发现我可以在子类中这样做:
ParentClass.variable = value;
但有人告诉我,最好使用 get/set 方法,而不是直接访问类外的变量。虽然这是当我在另一个类中有一个类的实例时,而不是子类和超类。
那么有没有更好的方法来做到这一点,哪种方法通常被认为是最佳实践?
你有很多选择。
super.field = x
您必须有权访问该字段才能执行此操作field = x
您必须有权访问该字段才能执行此操作。您也不能field
在孩子中拥有另一个,否则只会设置孩子的。setParentField(x)
我会说这是第二个最好的方法。x = callChildMethod()
此代码可以在父级中。孩子有返回结果的实现。如果这是可能的,这是最好的方法。查看模板方法模式如果超类中有任何私有成员,则可以使用 setter 和 getter 方法,因为我们不能在其子类中使用私有成员。
如果是任何静态实例成员,您可以在类名的帮助下直接使用。如果它是超类的实例成员,则尝试使用super关键字访问/修改子类中的该成员。如果您在超类和子类中具有相同名称的实例成员,您可以借助此关键字进行修改怎么办?那么在这种情况下,使用this关键字 JVM 将访问当前类的实例成员,即子类成员。
对于实例变量,您可以在子类的方法中执行以下操作:
this.variable = value;
这很好。要修改其他类的实例,最好使用 getter 和 setter。
确实应该防止其他类直接修改实例变量;在这种情况下,最好使用 getter 和 setter。但是在子类中,您可以直接修改实例变量。
在父类中的变量是公共的或受保护的之前,这件事可以正常工作。但是,一旦您将实例变量分配为私有,您就无法从它的子类访问该变量要使它们可访问,您需要通过创建公共方法来处理此问题
OOP 原则之一是encapsulations
拥有最佳实践代码,并拥有私有成员/变量,然后使用 setter/getter 访问它们是实现封装的方式 。