Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Haulmont-презентации Java / Haulmont. java_se_5.1.ppt
Скачиваний:
31
Добавлен:
16.03.2015
Размер:
988.67 Кб
Скачать

Методы и классы abstract

41• Объявления подобных классов снабжают модификатором abstract, тем же признаком помечают и методы класса, в объявлении которого отсутствует блок тела

Если необходимо создать класс, в котором все методы должны быть абстрактными, возможно, имеет смысл воспользоваться объявлением интерфейса

Во многих случаях код, относящийся к сфере компетенции самого базового абстрактного класса, - это хороший претендент на приобретение статуса final, гарантирующего, что контракт класса не будет нарушен

Любой класс, содержащий методы abstract, сам

должен быть обозначен как abstract

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Методы и классы abstract

42• Абстрактный метод должен быть переопределён в любом производном классе, если только тот не помечен как abstract

В любом производном классе позволено переопределять конкретные методы базового класса, помечая их признаком abstract

Объекты абстрактного класса нельзя создавать, поскольку заведомо известно, что какие-то его методы, которые могут быть вызваны прикладной программой, не реализованы

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Класс Object

43Класс Object находится на вершине иерархии классов

Java

Object явно или косвенно наследуется всеми классами, поэтому переменная типа Object способна указывать на объект любого типа, будь то экземпляр какого-либо класса или массив

Любой переменной типа Object нельзя непосредственно присваивать значения простых типов (таких как int, boolean и т.п.), но эти ограничения легко обойти, «запаковав» значения в объекты соответствующих классов-оболочек (Integer, Boolean и др.), которые будут описаны далее

В составе класса Object определена целая группа методов, которые наследуются всеми производными классами

Эти методы можно условно разделить на две категории – прикладные методы и методы, обеспечивающие поддержку многопоточных вычислений

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Методы класса Object

44 public boolean equals(Object obj)

Проверяет, равны ли текущий объект и объект, на который указывает ссылка obj, переданная в качестве параметра, и возвращает значение true, если факт равенства установлен, и false – в противном случае

Если необходимо проверить, указывают ли две ссылки на один и тот же объект, следует применять операторы == или !=

Метод equals сопоставляет содержимое объектов

В исходной реализации метода equals, предусмотренной в классе Object, предполагается, что объект равен только самому

себе, т.е.удовлетворяет условию this ==obj

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Методы класса Object

45 public int hashCode()

Возвращает значение хеш-кода текущего объекта

– числа, используемого для быстрого сравнения

объектов

Каждый объект обладает собственным хеш-кодом, который находит применение в хеш-таблицах

В реализации по умолчанию предусмотрен возврат значения, которое, как правило, различно для разных объектов

Значение кода используется в процессе сохранения объекта в одной из хеш-коллекций

Если объект не изменял свое состояние, то значение хэш-кода не должно изменяться

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Методы класса Object

46 protected Object clone() throws

CloneNotSupportedException

Возвращает клон текущего объекта

Клон – это новый объект, являющийся копией текущего

public final Class getClass()

Возвращает объект типа Class, который представляет информацию о классе текущего объекта на этапе выполнения программы

protected void finalize() throws Throwable

Позволяет выполнить необходимые операции очистки состояния объекта до того момента, когда объект будет уничтожен в процессе сборки мусора

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Методы класса Object

47 public String toString()

Возвращает строковое представление объекта

Метод toString() вызывается неявно, когда ссылка на объект употребляется в качестве операнда в контексте выражений конкатенации строк с помощью оператора +

Версия метода toString(), реализованная в классе Object, по умолчанию возвращает строку, содержащую наименование класса, которому принадлежит текущий объект, символ @ и шестнадцатеричное представление хеш-кода объекта

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

hashCode() и equals()

48 • Оба метода, hashCode() и equals(), должны быть переопределены, если необходимо придать понятию равенства объектов иной смысл, отличный от того, который предлагается классом Object

По умолчанию считается, что любые два различных объекта «не равны», т.е. метод equals() возвращает значение false, и их хеш- коды, как правило, различны

Если версия метода equals(), реализованная в некоем классе, допускает «равенство» двух различных объектов, их хеш-коды, возвращаемые соответствующими вариантами метода hashCode(), также должны быть равны

Если хэш-коды объектов одинаковы, то это еще не значит, что объекты эквивалентны

Механизм хеширования тесно связан с методом equals(), возвращающим true, если в хеш-таблице найден ключ с заданным значением

Изменение реализации в классе метода equals() влечет за собой изменение реализации метода hashCode()

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

 

Клонирование объектов

49

Результатом клонирования является копия объекта

Массивы поддерживают операцию клонирования:

 

int[] arrayCopy = (int []) array.clone();

В классе Object метод clone() является защищенным

Метод clone() реализуется в конкретном классе

Никто не гарантирует того, что результатом его выполнения будет копия объекта, и даже того, что новый объект будет того же класса

Однако существует ряд соглашений, регламентирующих

реализацию метода clone():

Класс должен реализовывать интерфейс-маркер (пустой

интерфейс) Cloneable. Метод Object.clone() проверяет, реализован ли в классе, которому принадлежит

текущий объект, интерфейc Cloneable, и выбрасывает исключение типа CloneNotSupportedException, если

ответ отрицательный

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Клонирование объектов

50Класс должен переопределять метод clone(). Результатом работы метода Object.clone() является точная копия объекта, т.е. Object.clone()

обеспечивает простое клонирование - копирование всех полей исходного объекта в объект-копию и по завершении работы возвращается ссылка на созданный объект-копию. Метод вполне работоспособен во многих ситуациях, но при определённых обстоятельствах приходится его переопределять и дополнять

Результат клонирования должен быть получен вызовом super.clone()

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Соседние файлы в папке Haulmont-презентации Java