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