Как клонировать объект Java с помощью метода clone ()

Мне непонятен механизм клонирования нестандартного объекта. Например:

public class Main{

    public static void main(String [] args) {

        Person person = new Person();
        person.setFname("Bill");
        person.setLname("Hook");

        Person cloned = (Person)person.clone();
        System.out.println(cloned.getFname() + " " + cloned.getLname());
    }
}

class Person implements Cloneable{

    private String fname;
    private String lname;

    public Object clone() {

        Person person = new Person();
        person.setFname(this.fname);
        person.setLname(this.lname);
        return person;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public void setLname(String lname){
        this.lname = lname;
    }

    public String getFname(){
        return fname;
    }

    public String getLname() {
        return lname;
    }
}

Этот пример показывает правильный способ клонирования, как написано в книгах. Но я могу удалить инструменты Cloneable в определении имени класса и получить тот же результат.

Итак, я не понимаю предложения Cloneable и почему метод clone () определен в классе Object?

17
задан Rinke 1 September 2017 в 09:13
поделиться