2013-10-29 16 views
5

からスーパークラスのインスタンス変数の値を変更する:は私が子供のクラスで、このようにそれを行うことができますことを発見しましたサブクラス

ParentClass.variable = value; 

しかし、私はそれはgetを使用する方が良い練習だと言われてきました/メソッドを設定し、クラス外の変数に直接アクセスすることはできません。これは、クラスのインスタンスが別のクラスにあったときで、サブクラスとスーパークラスではありません。

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

+3

get/setメソッドを使用し、クラス外の変数に直接アクセスすることはできません。 – Ingo

+0

これは関連するようです:http://stackoverflow.com/questions/19658621/update-fields-from-superclass/19658722#19658722 – MadConan

+0

保護されたゲッターを親に作成することを検討してください。 – shmosel

答えて

2

多くのオプションがあります。

  1. super.field = xあなたは、あなたがこれを行うには、フィールドへのアクセス権を持っている必要があり、この
  2. field = xを行うには、フィールドへのアクセス権を持っている必要があります。また、別の子供にfieldを持たせることはできません。そうでない場合は、子供のみが設定されます。
  3. setParentField(x)私はこれを行うのが二番目に良い方法だと思います。
  4. x = callChildMethod()このコードは親にある可能性があります。子は結果を返す実装を持っています。これが可能ならば、それを行うのが最善の方法です。参照してくださいOOPの原則のtemplate method pattern
0

は、インスタンス変数のためには、サブクラスのメソッドで、次の操作を行うことができます。完全に罰金です

this.variable = value; 

を。他のクラスのインスタンスを変更するには、getterとsetterを使用するのが最善です。

他のクラスがインスタンス変数を直接変更するのを防ぐ必要があります。その場合はgetterとsetterを使用することをお勧めします。しかし、サブクラスでは、インスタンス変数を直接変更できます。

-1

1は、ベストプラクティスのコードを持つことencapsulationsで、セッター/ゲッターを使用してそれらにアクセスし、その後、民間のメンバー/変数を持つことはカプセル化を達成するための方法です。

0

ゲッターとセッターを使用することをお勧めします。 More INFO

あなたが使用することができ、

ParentClass.variable = value; 

最高soltionは要件に依存します。

0

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

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

関連する問題