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 Ihre 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 können Sie 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 aus, was bedeutet, dass primitive Werte und Referenzen kopiert werden. Wenn Ihr Objekt andere Objekte als Felder enthält, verweisen sowohl das Original als auch die Kopie auf dieselben verschachtelten Objekte. Für wirklich unabhängige Kopien mit verschachtelten Objekten müssen Sie eine tiefe Kopie implementieren, indem Sie auch diese verschachtelten Objekte innerhalb Ihrer clone()-Methode klonen.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Dokumentenmanagementsystem erstellen, das das Klonen von Objekten demonstriert. Sie werden eine Document-Klasse erstellen, die geklont werden kann, um unabhängige Kopien zu erstellen, sodass Benutzer Dokumente duplizieren können, während das Original intakt bleibt.

Sie werden Ihren Code in zwei Dateien organisieren:

  • Document.java: Erstellen Sie eine Klasse, die ein Dokument darstellt und das Klonen unterstützt. Ein Document hat drei private Felder: title (String), author (String) und version (int). Fügen Sie einen Konstruktor zur Initialisierung aller Felder und Getter-Methoden für jedes Feld hinzu. Fügen Sie außerdem eine setVersion(int version)-Methode hinzu, um die Versionsnummer zu aktualisieren.

    Lassen Sie Ihre Document-Klasse das Cloneable-Interface implementieren und überschreiben Sie die clone()-Methode, um ein Document zurückzugeben. Behandeln Sie die CloneNotSupportedException innerhalb der Methode, indem Sie sie in eine RuntimeException einschließen.

    Überschreiben Sie toString(), um Folgendes zurückzugeben: Document[title=X, author=Y, version=Z], wobei X, Y und Z die tatsächlichen Feldwerte sind.

  • Main.java: Erwecken Sie Ihre Document-Klasse zum Leben, indem Sie ein Dokument erstellen und es klonen. Sie erhalten drei Eingaben: einen Titel (String), einen Autor (String) und eine Versionsnummer (int).

    Erstellen Sie ein Original-Document mit diesen Werten und klonen Sie es dann, um eine Kopie zu erstellen. Ändern Sie nach dem Klonen die Version der Kopie, indem Sie sie mit setVersion() um 1 erhöhen. Dies zeigt, dass der Klon wirklich unabhängig vom Original ist.

    Geben Sie drei Zeilen aus:

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

Sie erhalten drei Eingaben: den Dokumenttitel (String), den Namen des Autors (String) und die Versionsnummer (int).

Beachten Sie, wie das Originaldokument nach der Änderung der Version des Klons unverändert bleibt – dies beweist, dass clone() eine wirklich unabhängige Kopie erstellt hat!

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: Modifiziere die version des Klons, indem du sie um 1 erhöhst
        
        // TODO: Gib "Original: " gefolgt von dem originalen Dokument aus
        
        // TODO: Gib "Clone: " gefolgt von dem 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