пятница, 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 множественное наследование?
Ответ: Нет. Большинство возможностей множественного наследования поддерживается с помощью интерфейсов.

вторник, 26 апреля 2011 г.

с. 251 (Черновик) Свойства интерфейсов

"... оператор instanceof проверяет, принадлежит ли объект заданному классу. Однако с помощью этого оператора можно также проверять, реализует ли объект заданный интерфейс."
Одна из тех простых вещей, которая часто вылетает из головы.
Вопрос: Как проверить, реализует ли класс заданный интерфес?
Ответ:  С помощью оператора instanceof.
-----
"Аналогично классам интерфейсы также могут образовывать иерархию наследования."
Вопрос: Может ли один интерфейс наследовать другой интерфейс?
Ответ: Да.
Вопрос: Может ли один интерфейс наследовать несколько других интерфейсов?
Ответ: Да.
-----
"... все методы в интерфейсе автоматически объявляются открытыми. Аналогично константы в интерфейсе всегда являются открытыми статическими и терминальными."
А разве константа может быть не терминальной?
Вопрос: Как можно объявить в интерфейсе переменную?
Ответ: Никак. В интерфейсе можно объявить только константу.
Вопрос: Какими характеристиками обладают объявленные в интерфейсе свойства?
Ответ: Они являются открытыми статическими терминальными.
-----
"В некоторых интерфейсах объявляются только константы и ни одного метода."
При наследовании таких интерфейсов можно использовать объявленные в них константы напрямую, без указания имени интерфейса.
-----
"... любой класс может реализовывать несколько интерфейсов."
-----