2013-10-29 12 views
5

Ich habe Änderung festgestellt, dass ich es auf diese Weise in der Kind-Klasse tun können:den Wert der übergeordneten Klasse Instanzvariablen aus einer Unterklasse

ParentClass.variable = value; 

Aber ich habe gesagt, dass es besser Praxis zu verwenden, ist erhalten/Setzen Sie Methoden und geben Sie keinen direkten Zugriff auf Variablen außerhalb einer Klasse. Obwohl dies war, als ich eine Instanz der Klasse in einer anderen Klasse hatte, nicht für Unterklassen und Oberklassen.

Gibt es einen besseren Weg dies zu tun, und welcher Weg wird allgemein als Best Practice angesehen?

+3

Es ist besser, get/set-Methoden zu verwenden und keinen direkten Zugriff auf Variablen außerhalb einer Klasse zu geben. – Ingo

+0

das scheint relevant: http://stackoverflow.com/questions/19658621/update-fields-from-superclass/19658722#19658722 – MadConan

+0

Erwägen Sie, einen geschützten Getter auf dem übergeordneten zu erstellen. – shmosel

Antwort

2

Sie haben viele Optionen.

  1. super.field = x Sie haben Zugriff auf das Feld haben diese
  2. field = x Sie tun müssen, um Zugriff auf das Feld haben, dies zu tun. Sie können auch kein weiteres field im Kind haben oder nur das Kind wird gesetzt.
  3. setParentField(x) Ich würde sagen, das ist der zweitbeste Weg, es zu tun.
  4. x = callChildMethod() Dieser Code kann in den Eltern sein. Das Kind hat die Implementierung, die das Ergebnis zurückgibt. Wenn dies möglich ist, ist dies der beste Weg. Siehe template method pattern
0

Zum Beispiel Variablen können Sie die folgende in einer Methode einer Unterklasse tun:

this.variable = value; 

, die völlig in Ordnung ist. Um Instanzen anderer Klassen zu ändern, verwenden Sie am besten Getter und Setter.

Es stimmt zwar, dass Sie verhindern sollten, dass andere Klassen Instanzvariable direkt ändern. In diesem Fall ist es am besten Getter und Setter zu verwenden. In einer Unterklasse können Sie jedoch Instanzvariablen direkt ändern.

-1

einem der OOP-Prinzipien encapsulations ist Wohlverhaltens- zu haben, und mit einem eigenen Mitglieder/Variablen, dann greifen sie mit Setter/Getter ist die Art und Weise Verkapselung zu erreichen.

0

Am besten verwenden Sie Getter und Setter. Mehr INFO.

Sie verwenden können,

ParentClass.variable = value; 

Die beste soltion hängt von der Anforderung.

0

Wenn es ein privates Mitglied in der Oberklasse gibt, dann gibt es eine Verwendung von Setter und Getter-Methode als, weil wir nicht private Mitglied in seiner Unterklasse verwenden können.

Und im Falle eines statischen Instanzmitglieds können Sie direkt mit Hilfe des Klassennamens verwenden. Wenn es ein Instanzmitglied der Superklasse ist, dann versuchen Sie, dieses Mitglied in der Unterklasse mit dem Schlüsselwort super zu erreichen/ändern. Sie können mit Hilfe von dieses Schlüsselwort auch ändern, wenn Sie Instanzmitglied in der Oberklasse und Unterklasse mit dem gleichen Namen haben? Dann in diesem Fall, mit der Verwendung von dieses Schlüsselwort JVM Zugriff auf die aktuelle Klasse Instanz Mitglied, d.h Unterklasse Mitglied.

Verwandte Themen