GrabDuck

Класс Object | Java

:

Последнее обновление: 30.10.2015

Хотя мы можем создать обычный класс, который не является наследником, но фактически все классы наследуют от класса Object. Все остальные классы, даже те, которые мы добавляем в свой проект, являются неявно производными от класса Object. Поэтому все типы и классы могут реализовать те методы, которые определены в классе Object. Рассмотрим эти методы.

toString

Метод toString служит для получения представления данного объекта в виде строки. При попытке вывести строковое представления какого-нибудь объекта, как правило, будет выводиться полное имя класса. Например:

Book b1 = new Book("Война и мир", "Л. Н. Толстой", 1863);
System.out.println(b1.toString()); // будет выводить, что-то наподобие bookstore.Book@4aa298b7

Полученное мной значение (в данном случае bookstore.Book@4aa298b7) вряд ли может служить хорошим строковым описанием объекта. Поэтому метод toString() нередко переопределяют. Например:

class Book{

	//...........................
    public String toString(){
        
        return "Книга '" + name + "' (автор " +  author + ")";
    }
}

Метод hashCode

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

Например, выведем представление вышеопределенного объекта:

Book b1 = new Book("Война и мир", "Л. Н. Толстой", 1863);
System.out.println(b1.hashCode()); // выведет число 1252169911

Но мы можем задать свой алгоритм определения хэш-кода объекта:

class Book{
	public int hashCode(){

        return 10 * this.name.hashCode() +
                5 * author.hashCode() + 
                10*year;
    }
}

Получение типа объекта и метод getClass

Метод getClass позволяет получить тип данного объекта:

Book b1 = new Book("Война и мир", "Л. Н. Толстой", 1863);
System.out.println(b1.getClass()); // выведет class bookstore.Book

Метод equals

Метод equals сравнивает два объекта на равенство:

class Book{

	//................
    public boolean equals(Object obj){
        
        if (!(obj instanceof Book)) return false;

        Book b = (Book)obj;
        return (this.name == b.name && this.author==b.author);
    }
}

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

Оператор instanceof позволяет выяснить, является ли переданный в качестве параметра объект объектом определенного класса, в данном случае класса Book. Так как если объекты принадлежат к разным классам, то их сравнение не имеет смысла, и возвращается значение false.

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