子クラスでこのようにできることがわかりました:
ParentClass.variable = value;
しかし、get/set メソッドを使用し、クラス外の変数への直接アクセスを許可しない方が良い方法だと言われました。これは、サブクラスやスーパークラスではなく、別のクラスにクラスのインスタンスがある場合のためでした。
これを行うためのより良い方法はありますか?一般的にどの方法がベストプラクティスと考えられていますか?
子クラスでこのようにできることがわかりました:
ParentClass.variable = value;
しかし、get/set メソッドを使用し、クラス外の変数への直接アクセスを許可しない方が良い方法だと言われました。これは、サブクラスやスーパークラスではなく、別のクラスにクラスのインスタンスがある場合のためでした。
これを行うためのより良い方法はありますか?一般的にどの方法がベストプラクティスと考えられていますか?
多くのオプションがあります。
super.field = x
これを行うには、フィールドにアクセスする必要がありますfield = x
これを行うには、フィールドにアクセスできる必要があります。また、子に別のものを持つことはできませんfield
。または、子のみが設定されます。setParentField(x)
これが2番目に良い方法だと思います。x = callChildMethod()
このコードは親にある場合があります。子には、結果を返す実装があります。これが可能であれば、それが最善の方法です。テンプレートメソッドのパターンを見るインスタンス変数の場合、サブクラスのメソッドで次のことができます。
this.variable = value;
これは完全に問題ありません。他のクラスのインスタンスを変更するには、ゲッターとセッターを使用するのが最善です。
他のクラスがインスタンス変数を直接変更できないようにする必要があるのは確かです。その場合は、ゲッターとセッターを使用するのが最善です。ただし、サブクラスでは、インスタンス変数を直接変更できます。
スーパークラスにプライベート メンバーがある場合は、そのサブクラスでプライベート メンバーを使用できないため、setter メソッドと getter メソッドを使用します。
また、静的インスタンス メンバーの場合は、クラス名を使用して直接使用できます。それがスーパー クラスのインスタンス メンバーである場合は、superキーワードを使用して、サブクラス内のそのメンバーにアクセス/変更してみてください。このキーワードを使用して変更することもできますが、スーパークラスとサブクラスに同じ名前のインスタンス メンバーがある場合はどうでしょうか? この場合、このキーワードを使用して、JVM は現在のクラス インスタンス メンバー、つまりサブクラス メンバーにアクセスします。