2016-05-31 30 views
0

Ist es schlecht, Feldattribute direkt zu verweisen, wenn es eine Zugriffsmethode dafür gibt (get/set)?Verweisattribute durch Zugriffsmethoden oder direkt in der Oberklasse?

Auch bei JComponents initialisieren frühere Prüfungen die Feldattribute im Konstruktor, wenn ich keinen Grund sehe, warum sie im Klassenfeld nicht initialisiert werden kann. Gibt es einen guten Grund dafür oder kann ich mich frei entscheiden?

+1

1 Im Allgemeinen ja, da es den Punkt von Accessors besiegt. 2 Es ist eine Frage des Stils. Es wird empfohlen, den Stil zu verwenden, der von jedem bevorzugt wird, der Ihren Code bewertet. – khelwood

+0

Eine Antwort auf Ihre erste Frage: http://stackoverflow.com/questions/1568091/why-use-getters-and-setters – Akah

+0

Ich sehe. Es ist nur so, dass wir für die Prüfung auf Papier schreiben müssen und 8 Feldkomponenten im Konstruktor initialisieren müssen, nachdem die Variablen im Feld gesetzt wurden, wird ein bisschen frustrierend. Ich schätze, ich muss es dann einfach ablegen. –

Antwort

1

Erstellen eines Getter und Setter für ein privates Feld Hilfe zu verstecken die interne Implementierung der Klasse. Dies bedeutet, dass Sie die interne Darstellung ändern können, ohne die externe Schnittstelle zu anderen Klassen zu ändern.

Zum Beispiel, wenn Sie eine benutzerdefinierte Klasse, die eine Datenstruktur ähnlich eine Folge von Werten implementiert. Die erste Implementierung kann ein Array von Werten verwenden.

Hinzufügen einiger neuer Funktionen können Sie entscheiden, auf eine Liste der internen Darstellung der Werte aus einem Array zu ändern.

Hier ein Beispiel.

Originalcode mit einem Array:

public class MySequence { 
    private Object[] values; 

    public Object[] getValues() { 
     return values; 
    } 

    public void setValues(Object[] values) { 
     this.values = values; 
    } 
} 

Dann denke, man kann eine gute Idee, ein Verfahren zu schaffen, einen neuen Wert hinzuzufügen. Hier können Sie ändern die interne Implementierung, die gleiche Schnittstelle zu den Benutzern der MySequence-Klasse zu verlassen.