Java 1
  • Home
  • Tutorials
    • Hello World
      • Download
      • Installation unter Windows
      • Installation unter Linux
      • Das Hello World Programm
      • Mehr Java
    • Java Konsole
      • Java Konsole Testen
    • Basic Java
      • Java Programme
        • Die Klasse
        • Datentypen
        • Null
        • Casten
        • Operatoren
        • Kontrollstrukturen
        • Arrays
        • Aufgaben
      • Objektorientierte Konzepte
        • Hallo Fenster
        • Objekte einer Klasse
        • Vererbung
        • Interfaces
      • Alles über Klassen
        • Abstrakte Klassen
        • Methoden überschreiben
        • Super
        • Final
        • Innere Klassen
        • Anonyme Klassen
        • Enumerations
      • You're just an object
        • Sichtbarkeit
        • Druckdarstellung
        • Gleichheit
        • Klonen
        • Die Class
        • Serialisierung
    • Java Api
      • Dokumentation
      • Strings
      • Wrapper Klassen
      • System und Runtime
      • Math
      • Exceptions
      • IO
      • Sammlungsklassen
      • AWT und Swing
      • Alle Komponenten
      • Applets
      • Threads
      • Jar
      • Classpath
    • JSP und Servlets
      • Meine erste JSP
        • Downloads
        • Installation unter Windows
        • Installation unter Linux
        • Admin und Manager
        • Webapplication
      • JSP
        • Java Code in HTML einbinden
        • Das HTTP Request - Response Modell
        • Request und Response Objekte
        • Auswerten von Formulardaten
        • Aufgaben
      • Beans
        • Die Session
        • Weitere vordefinierte Objekte
        • Java-Beans
        • Beans programmieren
        • Java-Beans in JSP nutzen
        • Aufgaben
      • Servlets
        • Nutzen der Servlets
        • Servlets programmieren
        • Servlets auf dem Server einrichten
        • Servlets mit JSP
        • Servlets includen
        • Aufgaben
      • Webapplikation
        • Filter
        • Initialisierungsparameter
        • Error Pages
        • Passwortgeschützte Verzeichnisse
        • Bibliotheken nutzen
        • Eine Webapplikation deployen
        • Ausblick: Wie geht's weiter?
        • JSP-Tags Syntaxreferenz
        • Aufgaben
  • Code
    • Web
      • Datenbankverbindungen mit Tomcat
      • Texte richtig encoden
      • HTTPS mit Tomcat
      • HTML Encoden mit Javascript
    • Java
      • Print F
      • Ein generischer Poolbuilder
      • Native Bibliotheken
      • Unique Ids
    • Java FX
      • Balls
      • Hearts
      • Planner
    • Java ME
      • The Next Big Thing
    • System
      • Vi Kommandos
  • Sidemap
  • Impressum
  • Hilfe
Home > Tutorials > Basic Java > You're just an object > Klonen
  • Home
  • Tutorials
    • Hello World
    • Java Konsole
    • Basic Java
      • Java Programme
      • Objektorientierte Konzepte
      • Alles über Klassen
      • You're just an object
        • Sichtbarkeit
        • Druckdarstellung
        • Gleichheit
        • Klonen
        • Die Class
        • Serialisierung
    • Java Api
    • JSP und Servlets
  • Code
  • Sidemap
  • Impressum
  • Hilfe

Klonen (clone)

Die Methode clone() aus java.lang.Object erzeugt eine identische Kopie des Objekts, auf das sie angewendet wird. Dabei wird allen Feldern der Wert des ursprünglichen Objekts gesetzt.

Clone steht allerdings nur zur Verfügung, wenn die betreffende Klasse das Interface java.lang.Cloneable implementiert. Cloneable ist ein sogenanntes Zeigerinterface, es zeigt an, daß eine Klasse bestimmte Eigenschaften besitzt, schreibt aber keine Methoden vor oder definiert keine Konstanten. Implementieren Sie Cloneable, wenn Sie das Clonen ihrer Klasse gestatten wollen. Sie sollten dabei einfach die Basisimplementierung aus java.lang.Object mit„super.clone()" aufrufen, da sie eine sinnvolle Implementierung anbietet. Die Klasse Object selbst ist aber nicht Cloneable, weil sie diese Eigenschaft an alle anderen Klassen vererben würde. Ihre Methode „clone()" ist daher protected.

Das folgende Beispiel zeigt, wie clone() verwendet werden kann. Unsere Klasse besitzt eine Membervariable, da wir wissen wollen, wie sich das Clonen auf sie auswirkt.

Der Test auf Identität (c1 == c2) ergibt false, es handelt sich also offenbar um zwei verschiedene Objekte.

Interessant ist aber, dass sie eine gemeinsame Membervariable besitzen. Verändern wir „buffer" in c1, wird offenbar auch „buffer" in c2 verändert! Offenbar werden also nur die Objektreferenzen, nciht aber die Objekte selbst kopiert.

Manchmal kann es sinnvoll sein, die clone() - Methode aus java.lang.Object zu überschreiben, um eine eigene Implementierungvon clone zu realisieren. In diesem Fall sollte man sie natürlich public machen. Der auskommentierte Code biete eine solche Implementierung an. Entfernen Sie die Zeilen-Kommentare, kompilieren und starten Sie das Programm erneut. Wie Sie erkennen, implementieren wir die clone()-Methode, indem wir mit super.clone() die Methode aus Object aufrufen, um den Klon zu erhalten. Anschliessend erzeugen wir mit c.setValue(..) eine neue Membervariable, sodass die Unabhängigkeit gewährt ist.

Aufgabe: CloneEquals

Es ist unbefriedigend, dass equals() hier false bei gleicher Membervariable ergibt. Implementieren Sie equals und ggf. hashCode, um dies zu ändern. Rufen Sie sich in Erinnerung, was wir im Kapitel Gleichheit über diese Methoden herausgefunden haben.

Musterlösung: java1.aufg.kap_4.CloneEquals

« Gleichheit
You're just an object
Die Class »
Show/Hide Footer Actions

Kommentare:

Sie müssen angemeldet sein um eine Nachricht zu erstellen. Anmelden »
© 2012 Java 1. Alle Rechte vorbehalten.
Anmelden
concrete5 - open source CMS
Theme by Site5 / Mnkras.