Назад Зміст Вперед

Лабораторна робота: «Розробка підкласів із перевизначеними методами equals ()»

Метод equals () класу Object перевіряє, чи еквівалентні два об'єкти. Оскільки метод equals () реалізований в класі Object, він визначає лише, чи посилаються змінні на один і той же об'єкт.

Приклад.
package overrideEquals;
 public class Student
 {
   private int student_id;

   public Student(int student_id)
   {
     this.student_id = student_id;
   }

   public static void main(String[] args)
   {
     Student s1 = new Student(8888);
     Student s2 = new Student(8888);

     if(s1.equals(s2)){
         System.out.println("Рівні!");
     }
     else{
         System.out.println("Не рівні!");
     }
   }
}

Output: Не рівні!

У цьому прикладі об'єкти Student створені в конструкторі з однаковим student_id, а метод main виводить на екран: "Не рівні!" Причина полягає в тому, що метод equals не перевизначено. 

При неперевизначеному методі equals віртуальна машина переглядає адреси пам'яті кожного об'єкта, порівнює їх і в цьому випадку повертає false. Це не те, чого хочемо ми. Ми насправді хочемо порівняти вміст кожного об'єкта Student.

Щоб вирішити цю проблему треба перевизначити метод equals в класі Student таким чином:

package overrideEquals;
public class Student
{
  private int student_id;

  public Student(int student_id)
  {
    this.student_id = student_id;
  }

  public boolean equals(Object obj)
  {
    if(obj == this){
        return true;
    }

     /* obj посилається на null */

    if(obj == null){
        return false;
    }

     /* перевірка, чи посилання мають один і той самий тип */

    if(!(getClass() == obj.getClass())){
        return false;
    }
    else{
      Student tmp = (Student)obj;
      if(tmp.student_id == this.student_id){
        return true;
      }
      else{
        return false;
      }
    }
  }

  public static void main(String[] args)
  {
    Student s1 = new Student(8888);
    Student s2 = new Student(8888);

    if(s1.equals(s2)){
        System.out.println("Рівні!");
    }
    else{
        System.out.println("Не рівні!");
    }
  }
}

Output: Рівні!

Завдання. Як буде виглядати перевизначених метод equals для мобільних телефонів?


.