Instanzmethoden - www2.inf.h

Werbung
3. Klassen
Instanzmethoden
Instanzmethoden
Wie können wir Daten aus Objekten auslesen oder zuweisen, wenn wir hierzu nicht
berechtigt sind?
☞ Wir erweitern die Klasse um Instanzmethoden.
• Instanzmethoden sind beim Aufruf stets an ein Objekt gebunden, d.h. wir rufen
eine Instanzmethode auf einem Objekt auf.
• Innerhalb der Instanzmethode haben wir Zugriff auf alle Instanzvariablen.
• Methoden haben ihre eigenen Zugriffsrechte.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
74
3. Klassen
Instanzmethoden
Syntax der Deklaration von öffentlichen Instanzmethoden:
public Rückgabetyp Methodenname ( Parameterliste ) {
Anweisungen
}
Beispiele:
public String getName() {
return name;
}
public int getNummer() {
return nummer;
}
public void setName( String name ) {
this.name = name;
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
75
3. Klassen
Instanzmethoden
public void setNummer( int n ) {
nummer = n;
}
Darstellung als Klassendiagramm:
Student
-name:
-nummer:
+getName()
+getNummer()
+setName(String)
+setNummer(int)
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
String
int
String
int
void
void
76
3. Klassen
Instanzmethoden
Was ist this?
• Das Schlüsselwort this liefert innerhalb
einer Instanzmethode immer eine Referenz auf das Objekt selbst, d.h. auf das
Objekt, auf dem die Methode aufgerufen
wurde.
• Das Schlüsselwort this wird insbesondere dann benötigt, wenn Instanzvariablen durch Namenskonflikte verdeckt werden.
Beispiel: Die Methode setName. Der formale Parameter name verdeckt die Instanzvariable name.
• Mittels this.name können wir die Instanzvariable ansprechen.
• Der Compiler “denkt ein wenig mit”. Liegen keine Namenskonflikte vor, ist die Angabe von this nicht notwendig.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
"Karla Karlsson"
name
nummer
4711
this
77
3. Klassen
Instanzmethoden
Instanzmethoden als erweiterte Funktionalität
Wir wollen die Menge der gültigen Matrikelnummern einschränken:
Eine Matrikelnummer sei dann gültig, wenn sie fünf Stellen sowie keine führenden Nullen hat und ungerade ist.
Hierfür definieren wir eine Methode validateNummer:
public boolean validateNummer() {
return (nummer >= 10000 && nummer <= 99999 && nummer % 2 != 0);
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
78
3. Klassen
Instanzmethoden
Wir können nun unsere Methode setNummer so ändern, dass nur noch gültige Matrikelnummern akzeptiert werden.
public void setNummer(int n) {
int alteNummer = nummer;
nummer = n;
if (!validateNummer())
nummer = alteNummer;
}
Bemerkungen:
• höhere Funktionalität
• ohne Datenkapselung nicht möglich
• keine Änderung an der Schnittstelle der Klasse Student
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
79
3. Klassen
Instanzmethoden
Beispiel: Ausgabe von Objekten auf der Konsole:
public String toString() {
return name + " (" + nummer + ")";
}
Nutzung:
Student studi = new Student();
studi.setName("Karla Karlsson");
studi.setNummer(12345);
System.out.println(studi.toString());
Prinzipiell reicht sogar die Anweisung:
System.out.println(studi);
Grund: Jedes Objekt verfügt automatisch über eine Methode toString, die für die
Ausgabe genutzt wird. Wir haben hier toString überschrieben.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
80
Herunterladen