Иллюстрированный самоучитель по Java

       

Класс Object


Если при описании класса мы не указываем никакое расширение, т. е. не пишем слово

extends

и имя класса за ним, как при описании класса

Pet

, то Java считает этот класс расширением класса

object

, и компилятор дописывает это за нас:

class Pet extends Object{ . . . }

Можно записать это расширение и явно.

Сам же класс

object

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

object



.

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

equals()

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

Object objl = new Dog(), obj 2 = new Cat();

if (obj1.equals(obj2)) ...

Оцените объектно-ориентированный дух этой записи: объект

obj1

активен, он сам сравнивает себя с другим объектом. Можно, конечно, записать и

obj2.equals (obj1)

, сделав активным объект

obj2

, с тем же результатом.

Как указывалось в

главе 1,

ссылки можно сравнивать на равенство и неравенство:

obj1 == obj2; obj1 != obj 2;

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

Метод

equals()

же сравнивает содержимое объектов в их текущем состоянии, фактически он реализован в классе

object

как тождество: объект равен только самому себе. Поэтому его часто переопределяют в подклассах, более того, правильно спроектированные, "хорошо воспитанные", классы должны переопределить методы класса

object

, если их не устраивает стандартная реализация.

Второй метод класса

object

, который следует переопределять в подклассах, — метод

tostring ()

. Это метод без параметров, который пытается содержимое объекта преобразовать в строку символов и возвращает объект класса

string

.

К этому методу исполняющая система Java обращается каждый раз, когда требуется представить объект в виде строки, например, в методе

printing

.



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