Die Klasse java.lang.object. Thorsten Treffer

Ähnliche Dokumente
Kapitel 6. Vererbung

Kapitel 6. Vererbung

Kapitel 6. Vererbung

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Java Kurs für Anfänger Einheit 5 Methoden

Programmierkurs Java

3 Objektorientierte Konzepte in Java

Java Schulung (Java 2 Java Development Kit 5 / 6)

Java: Vererbung. Teil 3: super()

1 Polymorphie (Vielgestaltigkeit)

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

3 Objektorientierte Konzepte in Java

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Java Einführung Methoden in Klassen

Probeklausur: Programmierung WS04/05

Javakurs für Anfänger

13. Tutorium zu Programmieren

5.4 Klassen und Objekte

Java für Computerlinguisten

Objektorientierte Programmierung

Programmieren in Java

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Primitive Datentypen

Tutorium Java Ein Überblick. Helge Janicke

Algorithmen und Datenstrukturen 07

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

Studentische Lösung zum Übungsblatt Nr. 7

Typumwandlungen bei Referenztypen

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

5.6 Vererbung. Vererbung

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Einführung in die Programmierung für Wirtschaftsinformatik

Einführung in die. objektorientierte Programmierung

Aufgabe 1. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Objektorientierte Programmierung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Variablen manipulieren per JDI

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Beispiellösung der Klausur zu Objektorientierte Programmierung mit Java 09. Juli 2004 (SS 2004)

> Vererbung, Die Austauschbarkeit

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

Institut fu r Informatik

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Software Engineering Klassendiagramme Einführung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Übungen Programmieren 1 Felix Rohrer. Übungen

Objektorientierte Programmierung

Einführung in die Java- Programmierung

Propädeutikum zur Programmierung

Objektorientiertes Programmieren für Ingenieure

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

Repetitorium Informatik (Java)

Algorithmen und Datenstrukturen

GetName(), GetName(), GetGeschlecht() und AelterWerden().

Einführung in die Java- Programmierung

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Grundlagen der Informatik für Ingenieure I

Programmieren in Java

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Übungsblatt 3: Algorithmen in Java & Grammatiken

Java Einführung Operatoren Kapitel 2 und 3

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung

5. Threads, Serverprozesse und Benachrichtigungen

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken

Teil II. Objektorientierte Programmierung und objektorientierter Entwurf

C# im Vergleich zu Java

Vorkurs C++ Programmierung

Java Einführung Collections

Klassendefinitionen verstehen

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Vererbung, Polymorphismus

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Grundlagen der Programmierung Prof. H. Mössenböck. 11. Objektorientierung

PIWIN 1 Übung Blatt 5

Vorlesung Objektorientierte Programmierung Probeklausur

Dr. Monika Meiler. Inhalt

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Fehler die bei der Programmerstellung passieren können teilweise vom Compiler erkannt werden

4 Codierung nach Viginere (Lösung)

Transkript:

Die Klasse java.lang.object Thorsten Treffer 6. Dezember 2003

1 java.lang.object Die Klassenhierarchie von Java kann als Baum aufgezeichnet werden, dessen Wurzel die Klasse Object ist. Mit anderen Worten: alle Java-Klassen erben automatisch von der Klasse Object, ohne das dies explizit programmiert werden muss. Dies ist fester Bestandteil der Sprache Java. Damit besitzen auch alle Klasse automatisch die Methoden, die in der Klasse Object definiert sind, und damit eine gewissen Grundfunktionalität. Interessant sind vor allem: public String tostring() public boolean equals(object o) 2 public String tostring() Eine Klasse MeineKlasse sei gegeben. Der folgende Programmcode: public static void main(string[] args){ System.out.println("Zimtstern"); String s = new String("Kecks"); System.out.println(s); MeineKlasse meins = new MeineKlasse(); System.out.println(meins); erzeugt folgende Ausgabe: Zimtstern Kecks MeineKlasse@16930e2 Die ersten beiden Ausgaben stellen keine Überraschung dar, aber was hat die letzte zu bedeuten? Mit wenigen Worten: Die Methode public String to- String() wird aufgerufen, wenn man ein Objekt per System.out.println(Object o) auf die Konsole ausgeben möchte. Wenn man in der Klasse des auszugebenen Objektes die tostring()-methode, die sie durch Vererbung von der Klasse Object besitzt, nicht überschreibt, sie also seinen Bedürfnissen anpasst, wird der Code ausgeführt, wie er in der Klasse Object steht, der lediglich die Speicheradresse des Objektes ausgibt. Die Ausgabe MeineKlasse@16930e2 ist also die Speicheradresse der Objektes meins. Da dies in der Regel nicht sinnvoll ist, sollte man die Methode tostring() überschreiben, damit sie zum Beispiel eine Objektbeschreibung ausgibt. Bsp.: 1

public String tostring(){ //Rückgabe-String erzeugen String toreturn = new String(""); //Rückgabe-String füllen toreturn += "Beschreibung:"; toreturn += "Eigenschaft Alter:" + this.alter; toreturn += "Eigenschaft Wert:" + this.wert; //String zurückgeben return toreturn; Jetzt wird bei der Ausgabe eines Objektes dieser Klasse nicht mehr die Speicheradresse, sondern eine aussagekräftigere Objektbeschreibung ausgegeben. 3 public boolean equals(object o) Folgender Programmcode: public static void main(string[] args){ int a = 5; int b = 5; System.out.println(a == b); MeineKlasse meins = new MeineKlasse(); MeineKlasse deins = new MeineKlasse(); System.out.println(meins == deins); System.out.println(meins.equals(deins)); true false false erzeugt folgende Ausgabe: Wenn der ==-Operator aufgerufen wird, werden immer die Speicheradressen 1 der beteiligten Objekt verglichen 2. Die Methode public boolean equals(object 1 Hier sei nochmal auf den new-operator hingewiesen. Dieses Schlüsselwort sagt Java, dass es Speicherraum reservieren muss. Jedes Objekt, das mit new initialisiert wird, hat also automatisch einen eigenen Adressraum. 2 das gilt auch für die beiden int-werte. Java legt sich intern eine Speicherbank aller in eurem Code vorkommenden int-werte an. Alle 5er liegen also auf der gleichen Speicheradresse, weshalb der ==-vergleich von zwei 5en true ergibt. 2

o) aus der Klasse Object macht, wenn die nicht überschrieben wurde, nichts anderes. Wenn wir wollen, dass equals(object o) intuitivere Ergebnisse liefert, müssen wir die Methode also überschreiben und ihr dadurch eine intelligentere Funktionalität geben. Bsp.: public boolean equals(object o){ if(o instanceof MeineKlasse){ MeineKlasse tocheck = (MeineKlasse) o; return (this.alter == tocheck.alter && this.wert == tocheck.wert); else return false; Erklärung: Wir wollen zwei MeineKlasse-Objekte miteinander vergleichen, und dazu müssen wir die Methode equals(object o) überschreiben. Dazu sind wir gezwungen, die Signatur 3 der Methode exakt zu kopieren. Wir sind also gezwungen, als Parameter ein Object zu übergeben. Der Parameter der Methode ist daher von der Klasse Object. Object ist, wie gesagt, die Oberklasse aller anderen Klassen. Jede dieser Klassen besitzt die Grundfunktionalität von Object und fügt dieser lediglich Spezialisierungen hinzu. Wenn wir Java sagen, dass es diese Spezialisierungen ausblenden soll, können wir jedes Objekt behandeln, als wäre es eine Instanz der Klasse Object. Dadurch ist die Methode equals(object o) universell einsetzbar, da man als Parameter alles mitgeben kann, wozu man gerade Lust hat 4. Die Variable o ist aber eigentlich eine Instanz der Klasse MeineKlasse, da wir die Methode mit einem MeineKlasse-Objekt aufrufen, wird aber in der Methode als Object behandelt. Mit dem Schlüsselwort instanceof überprüft Java, welche Klasse sich ergibt, wenn die ausgeblendeten Spezialisierungen wieder einblendet werden. Mit instanceof MeineKlasse überprüfen wir, ob der Parameter o eine Instanz der Klasse MeineKlasse ist. Wenn nicht, kann der Parameter nicht gleich sein und wir gehen in den else-zweig, wo wir false zurückgeben. Wenn ja, blenden wir die Spezialisierungen in der nächsten Zeile wieder ein und betrachten den Paramter o als eine Instanz der Klasse MeineKlasse mit dem Variablen-Namen tocheck. Die nächste Zeile ist dann der Vergleich, der den ursprünglichen Adressraum-Vergleich ersetzt. Es wird also true zurückgegeben, wenn die beiden Objekte von ihren Werten her gleich sind, unabhängig ihrer Adressräume. 3 Die Signatur einer Methode ist der Methodenkopf zusammen mit den Parametern, hier also public boolean equals(object o). 4 Ausgenommen sind hier die primitiven Datentypen, da sie keine Objekte sind. 3

4 Nochmal in Kürze Alle Klasse erben implizit von der Klasse java.lang.object und besitzen von Beginn eine Grundfunktionalität, über deren praktischen Sinn man sich streiten kann. Die Methode public String tostring() wird immer dann aufgerufen, wenn ein Objekt per System.out.println(Object o) auf die Konsole ausgegeben wird. Durch überschreiben dieser Methode kann man selber bestimmen, welche Informationen auf der Konsole landen, wenn man mit dem Standard, nämlich der Ausgabe der Speicheradresse, nicht zufrieden ist. Die Methode public boolean equals(object o) verhält sich im Standard wie der ==-Operator, er vergleicht also die Speicheradressen der beiden zu vergleichenden Objekte. Auch hier empfiehlt es sich, die Methode zu überschreiben, wenn man Objekte auf eine andere Art miteinander vergleichen möchte. 4