JavaRush /Java блог /Архив info.javarush /Вопрос про метод clone
yabursev
11 уровень
Санкт-Петербург

Вопрос про метод clone

Статья из группы Архив info.javarush

Добрый день! В конце 21 уровня дан список дополнительной литературы. Так вот, читая одну из них (конкретно вот эту) у меня появился вопрос: Почему возникает ошибка компиляции для примера, который дан ниже???

Для блокирования возможности клонирования во всех классах Java, в базовом классе Object метод clone() был описан как защищенный (protected). Это не только исключает возможность использования метода клонирования программистом, просто использующим (не расширяющим) этот класс, но и означает что вы не можете использовать clone() используя ссылку на базовый класс. (Хотя это может показаться полезным. Например, при полиморфном клонировании связок классов Object). Такой метод применен для того, чтобы на этапе компиляции информировать о том что данный объект является неклонируемым. Как ни странно, большинство классов стандартных библиотек Java неклонируемые. Поэтому, написав: Integer x = new Integer(1); x = x.clone(); на этапе компиляции это приведет к возникновению ошибки. Компилятор выдаст сообщение о том что метод clone() недоступен (поскольку Integer не переопределяет его и он по умолчанию является защищенным (protected)).
Хочу понять почему. Потому что clone объявлен как protected? Но ведь все классы наследуется от Object, так что у всех он должен быть изначально. Или я ошибаюсь? Помогите пожалуйста!!!
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Игорь Уровень 41
19 декабря 2019
Потому что Integer не имплиментит интерфейс Cloneable