пятница, 10 июня 2011 г.

с. 257 (Черновик)

Если нужно, чтобы переменная Копия представляла собой новый объект, в первый момент своего существования идентичный объекту Оригинал, но совершенно независимый от него, используйте метод clone.
Метод clone является защищённым (protected) методом класса Object, т.е. его нельзя вызвать непосредственно. Только класс Employee может клонировать объекты своего класса. У этого ограничения есть существенная причина. Подумайте о способе, которым класс Object может реализовать метод clone. Ему вообще ничего неизвестно об объекте, поэтому он может копировать лишь поля. Если все поля класса являются числовыми или имеют другой основной тип, их копирование выполняется прекрасно. Однако если объект содержит ссылку на подобъект, то и оригинал, и клонированные объекты будут совместно использовать одну и ту же информацию.

"... его нельзя вызвать непосредственно."
То есть нельзя в методе одного класса создать экземпляр другого класса и вызвать его метод clone().

"Только класс Employee может клонировать объекты своего класса."
Только в коде класса Employee можно вызвать метод clone объекта типа Employee, и нигде более.
... операция клонирования по умолчанию является "поверхностной" - она не клонирует объекты, на которые есть ссылки в других объектах.
Если подобъект, используемый совместно как оригиналом, так и поверхностным клоном, является неизменяемым (immutable), это вполне безопасно.


Какие классы являются неизменяемыми? String, ...

среда, 8 июня 2011 г.

с. 256 (Черновик) Клонирование объектов

Клонирование объектов
После создания копии переменной и оригинал, и копия представляют собой ссылки на один и тот же объект. Это значит, что изменение одной переменной повлечёт за собой изменение другой.
"Изменение переменной..." Коряво звучит. Вероятно, подразумевается изменение состояния объекта, на который указывает ссылка-переменная.

Вопрос: Что представляет собой копия переменной?
Ответ: Если принять, что переменная - это ссылка на некоторый объект, то копия переменной - это другая ссылка, указывающая на тот же объект.

с. 255

с. 254

вторник, 7 июня 2011 г.

с. 253 Интерфейсы и обратные вызовы

Интерфейсы и обратные вызовы
Обратный вызов (callback) широко распространён в программировании. При обратном вызове программист задаёт действия, которые должны выполняться всякий раз, когда происходит некоторое событие.
Вопрос: Что такое обратный вызов?
Ответ: Обратный вызов (callback) - это реализация ответной реакции программы на некоторое событие, соответствие которых определено заранее.
packet java.awt.event;
public interface ActionListener {
    void actionPerformed (ActionEvent event);
}
Этот интерфейс используется для передачи метода, который будет вызван в случае возникновения некоторого события.

Вопрос: Какой интерфейс используется для реализации обратного вызова?
Ответ: ActionListener из пакета java.awt.event.

с. 252 Интерфейсы и абстрактные классы

Интерфейсы и абстрактные классы.
В других языках программирования, в частности в языке C++, классы могут иметь несколько суперклассов. Это свойство называется множественным наследованием (multiple inheritance). Разработчики Java решили не поддерживать множественное наследование, поскольку оно делает язык либо слишком сложным, либо менее эффективным.
В то же время интерфейсы предоставляют большинство возможностей множественного наследования, не усложняя язык и не снижая эффективность.

Вопрос: Что такое множественное наследование?
Ответ: Множественное наследование - это свойство языка программирования, позволяющее классам иметь несколько суперклассов.

Вопрос: Поддерживает ли язык программирования Java множественное наследование?
Ответ: Нет. Большинство возможностей множественного наследования поддерживается с помощью интерфейсов.