Menu
Coddy logo textTech

clone()-Methode

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 43 von 87.

Die Methode clone() erstellt eine Kopie eines Objekts. Um sie zu verwenden, muss deine Klasse das Interface Cloneable implementieren und die Methode clone() aus der Klasse Object überschreiben.

public class Person implements Cloneable {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public Person clone() {
        try {
            return (Person) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new RuntimeException(e);
        }
    }
}

Jetzt kannst du unabhängige Kopien von Objekten erstellen:

Person original = new Person("Alice", 25);
Person copy = original.clone();
// copy ist ein separates Objekt mit denselben Werten

Standardmäßig führt clone() eine flache Kopie durch, das heißt, es kopiert primitive Werte und Referenzen. Wenn dein Objekt andere Objekte als Felder enthält, verweisen sowohl das Original als auch der Klon auf dieselben verschachtelten Objekte. Für wirklich unabhängige Kopien mit verschachtelten Objekten musst du eine tiefe Kopie implementieren, indem du diese verschachtelten Objekte ebenfalls innerhalb deiner clone()-Methode klonst.

challenge icon

Aufgabe

Einfach

Erstellen wir ein Dokumentverwaltungssystem, das das Klonen von Objekten demonstriert. Du erstellst eine Document-class, die geklont werden kann, um unabhängige Kopien zu erstellen. So können Benutzer Dokumente duplizieren und dabei das Original unverändert behalten.

Du organisierst deinen Code auf zwei Dateien:

  • Document.java: Erstelle eine class, die ein Dokument darstellt und das Klonen unterstützt. Ein Document verfügt über drei private Felder: title (String), author (String) und version (int). Füge einen constructor hinzu, der alle Felder initialisiert, sowie getter methods für jedes Feld. Füge außerdem eine setVersion(int version)-method hinzu, um die Versionsnummer zu aktualisieren.

    Lass deine Document-class das Cloneable-interface implementieren und überschreibe die clone()-method, sodass sie ein Document zurückgibt. Behandle die CloneNotSupportedException innerhalb der method, indem du sie in eine RuntimeException einschließt.

    Überschreibe toString(), sodass Folgendes zurückgegeben wird: Document[title=X, author=Y, version=Z], wobei X, Y und Z die tatsächlichen Feldwerte sind.

  • Main.java: Lass deine Document-class zum Leben erwachen, indem du ein Dokument erstellst und es klonst. Du erhältst drei Eingaben: einen Titel (String), einen author (String) und eine Versionsnummer (int).

    Erstelle ein Original-Document mit diesen Werten und klone es anschließend, um eine Kopie zu erstellen. Ändere nach dem Klonen die Version der Kopie, indem du sie mithilfe von setVersion() um 1 erhöhst. Dies zeigt, dass der Klon wirklich unabhängig vom Original ist.

    Gib drei Zeilen aus:

    1. Original: , gefolgt von der toString()-Darstellung des Originaldokuments
    2. Clone: , gefolgt von der toString()-Darstellung des geklonten Dokuments
    3. Independent: , gefolgt von true oder false, was angibt, ob das Original und der Klon unterschiedliche Objekte sind (verwende den !=-Vergleich)

Du erhältst drei Eingaben: den Dokumenttitel (String), den Namen des authors (String) und die Versionsnummer (int).

Beachte, dass das Originaldokument nach der Änderung der Version des Klons unverändert bleibt. Dies beweist, dass clone() eine wirklich unabhängige Kopie erstellt hat!

REQUIRED OUTPUT FORMAT: [Your translated content here]

Probier es selbst

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Eingaben lesen
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        int version = scanner.nextInt();
        
        // TODO: Erstelle ein originales Document mit den Eingabewerten
        
        // TODO: Klone das originale Dokument, um eine Kopie zu erstellen
        
        // TODO: Ändere die version des Klons, indem du sie um 1 erhöhst
        
        // TODO: Gib "Original: " gefolgt vom originalen Dokument aus
        
        // TODO: Gib "Clone: " gefolgt vom geklonten Dokument aus
        
        // TODO: Gib "Independent: " gefolgt von true/false aus (prüfe, ob original != clone)
        
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Java-Compiler