Философия Java

         

Обеспечение клонируемости объектов-наследников


Когда создается новый класс, ему по умолчанию передаются свойства базового класса Object, который по умолчанию является не клонируемым (об этом пойдет речь в следующем разделе), и остается таковым до тех пор, пока вы не захотите этого. Однако, после того как вы добавите возможность клонирования в какой-либо класс, она будет передана всем нижестоящим по иерархии классам:

//: Приложение А:HorrorFlick.java

// Вы можете добавить клонируемость в

// любой уровень иерархии наследования объектов.

import java.util.*;

class Person {} class Hero extends Person {} class Scientist extends Person implements Cloneable { public Object clone() { try { return super.clone(); } catch(CloneNotSupportedException e) { // этого не должно произойти:

// он уже клонируемый!

throw new InternalError(); } } } class MadScientist extends Scientist {}

public class HorrorFlick { public static void main(String[] args) { Person p = new Person(); Hero h = new Hero(); Scientist s = new Scientist(); MadScientist m = new MadScientist();

// p = (Person)p.clone(); // Ошибка компиляции

// h = (Hero)h.clone(); // Ошибка компиляции

s = (Scientist)s.clone(); m = (MadScientist)m.clone(); } } ///:~

Перед тем как добавить клонируемость, компилятор остановит вас при попытке клонировать предметы (things). Когда клонируемость будет добавлена в Scientist, Scientist и все его наследники станут клонируемыми.



Содержание раздела