В java у нас есть и интерфейс cloneable Что я хочу понять, почему абстрактный класс реализует этот интерфейс, до сих пор не существует реализации метода clone() интерфейса в абстрактном классе?Шаблон создания прототипа
ответ
В Java мы имеем и интерфейс Cloneable То, что я хочу, чтобы понять почему абстрактный класс реализует этот интерфейс до сих пор нет реализации клона() метод интерфейса в абстрактный класс?
Класс объекта обеспечивает реализацию по умолчанию для методов Object
, метод clone()
.
Если вы посмотрите Object
класс, вы можете увидеть, что clone()
указывает конкретное ключевое слово, указанное в его подписи: native
.
protected native Object clone() throws CloneNotSupportedException;
native
ключевого слово применяется к методу, чтобы указать, что он реализован в JNI
(Java Native Interface).
Итак, реализация существует где-то (возможно, в функции C, но не исключительно ...), но не непосредственно в исходном коде Java метода.
Наконец, вы должны рассмотреть Cloneable interface
, что он означает: маркер interface
. Если вы хотите, чтобы вы возражаете быть клонируемыми, осуществить это, и если вы не заботитесь, ничего не делать:
Класс реализует Cloneable интерфейс для указания метода Object.clone(), что является законным для этого метода сделать копию экземпляров этого класса для поля . Invoke Object метод clone для экземпляра, который не реализует интерфейс Cloneable , приводит к исключению исключения CloneNotSupportedException, которое выбрано .
Теперь, если реализация clone()
метода (неглубоко копия) по умолчанию не совпадает с тем, как вы хотите, чтобы клонировать объект, не стесняйтесь, чтобы переопределить clone()
в классе этого объекта.
Интерфейс Cloneable предназначен только для обозначения того, что класс поддерживает метод clone в Object.clone().
Класс реализует интерфейс Cloneable, чтобы указать методу Object.clone(), что для этого метода является законным копирование экземпляров этого класса в поле.
Вы не должны реализовать этот метод, Object.clone сделать это для Вас, в родной код:
protected native Object clone() throws CloneNotSupportedException;
Взгляните на эти ссылки: Object class source code и Cloneable Interface docs
Несмотря на это, если у вас есть один абстрактный класс на уровне иерархии, вам не нужно реализовывать класс «Клонируемый» для детей:
abstract class Animal implements Cloneable {
protected String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private int age;
@Override
public Dog clone() throws CloneNotSupportedException {
return (Dog)super.clone();
}
Клон все еще поддерживается Java
- 1. Шаблон прототипа (вызывающая функция)
- 2. Прототипа шаблон в Python
- 3. Существует ли шаблон проектирования для создания прототипа с разными значениями?
- 4. Шаблон шаблона прототипа, что клонируется?
- 5. Update прототипа после создания объекта
- 6. создания прототипа с использованием ES6
- 7. Javascript: шаблон модуля против шаблона конструктора/прототипа?
- 8. Шаблон прототипа с дженериками вместо клонируемого
- 9. Шаблон прототипа в Java - метод clone()
- 10. создания функционального объекта прототипа и кода неправильно
- 11. с использованием создания прототипа в Javascript
- 12. Использование прототипа для создания массива с методами
- 13. Различные способы создания яваскрипта прототипа цепочки наследования
- 14. Java-реализации шаблона прототипа
- 15. Частица Javascript: следует ли использовать шаблон фабрики или объекта/прототипа?
- 16. Шаблон отсутствует для регистрации/создания, приложения/создания
- 17. Извлечение прототипа прототипа данных
- 18. Этот шаблон создания фабричного метода?
- 19. Массового создания HIT через Шаблон
- 20. шаблон лесов для создания репозиториев
- 21. Ищете шаблон дизайна для создания
- 22. Невозможно использовать метод прототипа прототипа
- 23. Пример образца шаблона прототипа (C++)
- 24. Как ввести шаблон прототипа в пространство имен javascript
- 25. Проблема прототипа
- 26. Есть ли аналогичный способ создания массива без его прототипа?
- 27. Какая польза от использования прототипа после создания функции конструктора?
- 28. Что такое переносимый способ установки свойства прототипа после создания объекта?
- 29. Использование MongoDB и Eve для быстрого создания прототипа iOS?
- 30. Singleton против прототипа JdbcTemplate