JavaRush /Java блог /Архив info.javarush /Клонирование
Core
35 уровень
Екатеринбург

Клонирование

Статья из группы Архив info.javarush
Доброго времени суток. В доп. материалах к 21 уровню прочитал, что, если хочешь пользоваться реализацией клонирования по умолчанию (той, что есть у класса Object), то нужно реализовать интерфейс Cloneable и переопределить метод clone(), вызвав в нём метод clone() класса предка. Это я понял, усвоил, запомнил: вобщем или реализовывай clone() с нуля, не обращаясь к методу clone() суперкласса (тогда и маркернрый интерфейс Cloneable по сути не нужно реализовывать в своём классе) или делай то, о чем я написал ранее. Усвоено. У меня нет понимания почему нельзя просто реализовать интерфейс Cloneble без переопределения метода clone(), если я хочу реализацией по умолчанию воспользоваться. Лезу к класс Object, вижу у метода clone() модификатор protected, понимаю, что этот метод должен быть доступен всем наследникам, коими являются все классы. Но компилятор ругается на попытку вызвать метод clone() без его переопределения в моём классе. Думаю, ну наверное нужно явное наследование может быть, добавляю к своему классу extands Object (оставив разумеется implements Cloneable), но компилятор все равно ругается на попутку вызвать clone() без его переопределения в моём классе. Ну, то есть я понял как надо клонировать правильно, но я хочу докопаться и понять, как компилятор понимает, что нельзя воспользовать реализацией по умолчанию, не переопределив её в своём классе. Ну вот на такой простой пример компилятор ругается в месте вызова метода clone()
public class CloneTesting { public static class Cat extends Object implements Cloneable { String name; public Cat(String name) { this.name = name; } //@Override //public Cat clone() throws CloneNotSupportedException { // return (Cat) super.clone(); //} } public static void main(String[] args) throws CloneNotSupportedException { Cat cat1 = new Cat("Пуля"); //вариант клонирования по умолчанию. Object cat2 = cat1.clone(); System.out.println(cat1); System.out.println(cat2); } }
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ