

































Besser lernen dank der zahlreichen Ressourcen auf Docsity
Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo
Prüfungen vorbereiten
Besser lernen dank der zahlreichen Ressourcen auf Docsity
Download-Punkte bekommen.
Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo
Community
Finde heraus, welche laut den Docsity-Nutzern die besten Unis deines Landes sind
Kostenlose Leitfäden
Lade unsere Leitfäden mit Lernmethoden, Hilfen zur Angstbewältigung und von Docsity-Tutoren erstellte Tipps zum Verfassen von Haus- und Abschlussarbeiten kostenlos herunter
– Methoden: Parameter und Rückgabewert haben Typ. • Unwichtige Unterschiede: Syntaxdetails, z.B. new. • Wesentliche Unterschiede: Das Vererbungskonzept! 17.2.2 ...
Art: Leitfäden, Projektarbeiten und Recherchen
1 / 41
Diese Seite wird in der Vorschau nicht angezeigt
Lass dir nichts Wichtiges entgehen!
Inhaltsverzeichnis 1
Abbildungsverzeichnis 2
Liste von Definitionen u.ä. 2 17.1 Überblick............................... 3 17.2 Klassen................................ 3 17.3 Methoden.............................. 7 17.4 Einfachvererbung.......................... 20 17.5 Mehrfachvererbung und Ersatz dafür............... 30 17.6 Zusammenfassung, Einordnung.................. 40
4 Liste von Definitionen u.ä.
1 class Klassenname { 2 Variablendeklaration1; 3 Variablendeklaration2; 4 Variablendeklaration3; 5 6 Methodendeklaration 7 Methodendeklaration 8 Methodendeklaration 9 }
Zunächst eine Klasse ohne Methode
1 class Ellipse { 2 // Daten deklarieren: 3 double x, y; 4 double achse1, achse2; 5 }
Zwei Aspekte: Deklaration und Erzeugung
Deklaration Wir deklarieren eine Variable vom Typ Ellipse
1 // Variable deklarieren; es gibt noch kein Objekt! 2 Ellipse e;
Zwei Aspekte: Deklaration und Erzeugung
17.2. Klassen 5
Erzeugung
1 // Variable deklarieren; es gibt noch kein Objekt! 2 Ellipse e; 3 4 // Objekt erzeugen: Schlüsselwort new 5 // aber das Objekt geht sofort verloren; 6 // wir müssen eine Referenz darauf aufheben 7 new Ellipse(); 8 9 // Also richtig: 10 e = new Ellipse();
Anmerkung: Trennung von Deklaration und Erzeugung in Python? Dieser zweischrittige Prozess kommt Ihnen – aus der Python-Perspektive – sicherlich seltsam vor. Dort werden Variablen nicht deklariert (in einer dyna- misch typisierten Sprache nicht notwendig, eigentlich gibt es ja auch keine Variablen in Python); sie werden bei Bedarf im Moment der Zuweisung er- schaffen.
Auf Daten eines Objekts kann wie gewohnt durch Punkt-Notation zugegriffen werden
1 class Ellipse { 2 // Daten deklarieren: 3 double x, y; 4 double achse1, achse2; 5 } 6 7 Ellipse e; 8 e = new Ellipse();
17.3. Methoden 7
4 5 Zeile[] matrix;
17.3 Methoden
1 class Ellipse { 2 // Daten deklarieren: 3 double x, y; 4 double achse1, achse2; 5 6 void verschiebe( double deltax, double deltay) { 7 this .x += deltax; 8 this .y += deltay; 9 } 10 } 11 12 // verkürzte Notation: 13 Ellipse e = new Ellipse(); 14 e.x = 17.12;
8 Liste von Definitionen u.ä.
15 e.verschiebe(5, -0.2); 16 System.out.println(e.x);
e ==> Ellipse@cb644e $3 ==> 17.
Definition 17.1 (Signatur einer Methode). Die Signatur einer Methode ist festgelegt durch
Anmerkung Der Typ des Rückgabewerts (ggf. void) wird in Java nicht als Teil der Signatur angesehen Signatur in Java. Es gibt Programmiersprachen, bei denen auch das als Teil der Signatur aufgefasst wird.
Aufruf überladener Methoden? Wie wird beim Aufruf die richtige Methode ausgesucht?
1 class UeberladeneMethoden { 2 void f( int a) { System.out.println("Variante 1"); }
10 Liste von Definitionen u.ä.
5 6 public static void g(String [] x) { 7 x = new String[] {"lokaler", "Wert"}; 8 } 9 10 public static void main(String [] args) { 11 String [] s = new String[2]; 12 s[0]= "Hallo"; 13 s[1] = "GP1"; 14 System.out.println(s[1]); 15 16 f(s); 17 System.out.println(s[1]); 18 19 g(s); 20 System.out.println(s[1]); 21 } 22 }
Neuer String Neuer String
(PT link)
Visualisierung Um das Verhalten bei unterschiedlicher Nutzung eines Referenz-Parameters darzustellen, hier einige Illustrationen zu diesem Code-Beispiel.
17.3. Methoden 11
Abbildung 17.1: Methodenaufruf mit Referenzparameter: Vor Zuweisung in f
Abbildung 17.2: Methodenaufruf mit Referenzparameter: Nach Zuweisung in f
17.3. Methoden 13
Abbildung 17.5: Nach Rückkehr aus g
Rückgabetyp primitive type
Rückgabewert reference type
Kompatibilitätsregeln
Wie bei allen Zuweisungen auch!
Insgesamt
Im Endeffekt sehr ähnlich zu Python!
Typ des return Ausdrucks muss zuweisungskompatibel zu Typ in Methoden- signatur sein
14 Liste von Definitionen u.ä.
Beispiel 1: Funktioniert
1 class Ellipse { 2 // (Daten weggelassen) 3 double flaeche() { 4 return 3.1415 * self.achse1 * self.achse2; 5 } 6 }
Beispiel 2: Funktioniert auch – impliziter typecast
1 class Ellipse { 2 // (Daten weggelassen) 3 double flaeche() { 4 return 3 * (( int ) self.achse1) * (( int ) self.achse2); 5 } 6 }
Beispiel 3: Scheitert – keine implizite Umwandlung möglich
1 class Ellipse { 2 // (Daten weggelassen) 3 int flaeche() { 4 return 3.1415 * self.achse1 * self.achse2; 5 } 6 }
Lokale Variablen in Methoden
16 Liste von Definitionen u.ä.
Objektbezogen Klassebezogen/statisch Deklaration ohne static mit static Existenz separat in jedem Ob- jekt
1x pro Klasse
Attribut wird ange- legt
bei Objekterzeugung (new)
bei Laden der Klasse (meist: Programman- fang) Attribut wird ver- nichtet
wenn Objekt vernich- tet wird (keine Refe- renz mehr existiert)
wenn Klasse entladen (meist: Programmen- de) Konstruktur bei Objekterzeugung (new)
bei Laden der Klasse
Zugriff auf Datenat- tribut d
obj.d oder this.d Klassenname.d
Aufruf einer Me- thode d
obj.m() oder this.m()
Klassenname.m()
Definition 17.2 (Sichtbarkeit einer Variablen in Java). Die Sichtbarkeit (oder der Gültigkeitsbereich ) einer Variable erstreckt sich von der Deklaration der Variable bis zum Ende des Blocks, in dem die Deklaration stattfand. Beispielsweise ist die Sichtbarkeit einer Objekt- oder Klassenvariable die Klasse. Für sie gilt zudem eine Ausnahme: Sie sind auch schon vor ihrer Deklaration in allen Methoden der Klasse sichtbar. Eine Variable kann durch eine gleichnamige Variable in einem enthaltenen Block überdeckt werden. Eine Methode kann eine Variable deklarieren, die eine Klassenvariable gleichen Namens überdeckt. (Ein normaler Block darf das nicht.)
Definition 17.3 (Lebensdauer einer Variable in Java). Die Lebensdauer einer Variable ist die Zeitspanne, in der die Variable einen gültigen Wert besitzt (der Wert kann eine Referenz auf ein Objekt sein).
Lebensdauer vs. Sichtbarkeit Nicht das gleiche!
17.3. Methoden 17
Funktioniert das?
1 class Artikel { 2 String artikelnummer; 3 public Artikel(String _an) { 4 this .artikelnummer = _an; 5 } 6 } 7 8 class Book extends Artikel { 9 String ISBN; 10 public Book(String _an, String _isbn) { 11 // das hier verletzt DRY: 12 this .artikelnummer = _an; 13 14 this .ISBN = _isbn; 15 } 16 17 public String toString() { 18 return this .artikelnummer + " -- " + this .ISBN; 19 }
17.3. Methoden 19
Erläuterung
1 Integer intObj = new Integer(42); 2 int x = intObj.intValue();
intObj ==> 42 x ==> 42
20 Liste von Definitionen u.ä.
17.4 Einfachvererbung
Klassenhierarchien, die nur Einfachvererbung nutzen, unterscheiden sich kaum (zwischen Python und Java)
1 class Book extends Article { 2 // ggf. neue Daten 3 String ISBN; 4 // ggf. neue Methoden oder Methoden überschreiben 5 void showInfo() { 6 // Aufruf der Methode der Oberklasse: 7 super .showInfo(); 8 // und eigene Ausgabe 9 System.out.println("ISBN: " + this .ISBN); 10 } 11 }
1 class Article { 2 String artikelnummer; 3 } 4