Метод клонирования не виден

#java #clone

#java #клонировать

Вопрос:

почему я получаю метод клонирования, не видимый для класса object

 class a7 implements Cloneable
{
    int id;
    float f;

}

class test
{
    public static void main(String[] args) throws CloneNotSupportedException {
        a7 x=new a7();
        //      x.clone(); //here i am getting the error
    }   

}
  

хотя метод clone защищен и к нему доступны подклассы и и один в том же пакете, и мы знаем, что каждый класс по умолчанию является подклассами класса object

Комментарии:

1. Находятся ли a7 и test классы в одном пакете?

2. clone() есть protected . Стандартная практика — переопределить его, создать public и заставить возвращать ваш тип, а не Object . Не забудьте вызвать super.clone() .

3. @BoristheSpider какая-либо причина или что?

4. Пожалуйста, придерживайтесь соглашений об именовании Java. Классы должны быть в PascalCase . camelCase зарезервирован для переменных.

5. howtodoinjava.com/2012/11/08/a-guide-to-object-cloning-in-java/… эта ссылка

Ответ №1:

Из документов:

По соглашению, классы, которые реализуют этот интерфейс, должны переопределять Object.clone (который защищен) с помощью общедоступного метода. Смотрите Object.clone() для получения подробной информации о переопределении этого метода.

Я бы также ознакомился с советом Джошуа Блоха по поводу Cloneable

Если вы читали статью о клонировании в моей книге, особенно если вы читаете между строк, вы будете знать, что я думаю, что clone сильно поврежден. Есть несколько недостатков дизайна, самым большим из которых является то, что в клонируемом интерфейсе нет метода clone. И это означает, что он просто не работает: создание чего-либо клонируемого ничего не говорит о том, что вы можете с этим сделать. Вместо этого в нем говорится кое-что о том, что он может делать внутри. В нем говорится, что если при повторном вызове super.clone в конечном итоге вызывается метод clone объекта, этот метод вернет копию поля оригинала

.