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