Класс 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.

 

Сайт создан в системе uCoz