web-dev-qa-db-ja.com

サブクラスからのスーパークラスインスタンス変数の値の変更

私は子供クラスでこのようにそれを行うことができることを発見しました:

ParentClass.variable = value;

しかし、get/setメソッドを使用し、クラス外の変数に直接アクセスしない方がよいと言われています。これは、サブクラスやスーパークラスではなく、別のクラスにクラスのインスタンスがある場合のためのものです。

それで、これを行うためのより良い方法はありますか、そしてどの方法が一般的にベストプラクティスと考えられていますか?

7
IBOED2

あなたにはたくさんの選択肢があります。

  1. _super.field = x_これを行うには、フィールドにアクセスできる必要があります
  2. _field = x_これを行うには、フィールドにアクセスできる必要があります。また、子に別のfieldを含めることはできません。そうしないと、子のみが設定されます。
  3. setParentField(x)これが2番目に良い方法だと思います。
  4. x = callChildMethod()このコードは親に含めることができます。子には、結果を返す実装があります。これが可能であれば、それが最善の方法です。 テンプレートメソッドパターン を参照してください
4
Daniel Kaplan

インスタンス変数の場合、サブクラスのメソッドで次のことを実行できます。

this.variable = value;

これは完全に問題ありません。他のクラスのインスタンスを変更するには、ゲッターとセッターを使用するのが最善です。

他のクラスがインスタンス変数を直接変更しないようにする必要があるのは事実です。その場合、ゲッターとセッターを使用するのが最善です。ただし、サブクラスでは、インスタンス変数を直接変更できます。

0
Simeon Visser

ベストプラクティスは、ゲッターとセッターを使用することです。詳細 [〜#〜] info [〜#〜]

あなたが使うことができます、

ParentClass.variable = value;

最適なソリューションは、要件によって異なります。

0

スーパークラスにプライベートメンバーがある場合、そのサブクラスにプライベートメンバーを使用できないため、setterメソッドとgetterメソッドが使用されます。

また、静的インスタンスメンバーの場合は、クラス名を使用して直接使用できます。それがスーパークラスのインスタンスメンバーである場合は、superキーワードを使用して、サブクラス内のそのメンバーにアクセス/変更してみてください。 thisキーワードを使用して変更することもできます。また、スーパークラスとサブクラスに同じ名前のインスタンスメンバーがある場合はどうなりますか?この場合、thisキーワードを使用すると、JVMは現在のクラスインスタンスメンバー、つまりサブクラスメンバーにアクセスします。

0
user2885596