【问题标题】:Changing the value of superclass instance variables from a subclass从子类更改超类实例变量的值
【发布时间】:2013-11-09 02:32:13
【问题描述】:

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

ParentClass.variable = value;

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

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

【问题讨论】:

标签: java inheritance subclass superclass


【解决方案1】:

你有很多选择。

  1. super.field = x您必须有权访问该字段才能执行此操作
  2. field = x 您必须有权访问该字段才能执行此操作。您也不能在孩子中拥有另一个field,否则只会设置孩子的field
  3. setParentField(x) 我会说这是第二好的方法。
  4. x = callChildMethod() 此代码可以在父代中。孩子有返回结果的实现。如果这是可能的,这是最好的方法。见template method pattern

【讨论】:

    【解决方案2】:

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

    this.variable = value;
    

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

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

    【讨论】:

      【解决方案3】:

      您的最佳做法是使用 getter 和 setter。更多INFO

      你可以使用,

      ParentClass.variable = value;
      

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          在父类中的变量是公共的或受保护的之前,这个东西可以正常工作。 但是一旦将实例变量分配为私有变量,就无法从它的子类访问该变量 要使它们可访问,您需要通过创建公共方法来处理此问题

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-16
              • 1970-01-01
              • 1970-01-01
              • 2015-10-07
              • 2017-07-11
              相关资源
              最近更新 更多