Peanutcalota
Peanutcalota

Reputation: 135

How can I override equals() method using inheritance?

I have a subclass called "worker" extending the "Person" class. I am trying to override the equals() method from "Person" within the subclass of "Worker". Can anyone explain if my attempt is correct in terms of a basic override?

public class Person {
    private String name;
    public Person(String n) {
        name = n;
    }
    public Person() {
        this("");
    }
    public String getName() {
        return name;
    }
    public String toString() {
        return getName() + " ";
    }
    public boolean equals(Object rhs) {
        if (!(rhs instanceof Person)) {
            return false;
        }
        Person other = (Person) rhs;
        return this.getName().equals(other.getName());
    }
    class Employee extends Person {
        double salary;
        public Employee(double b) {
            salary = b;
        }
        Employee() {
            salary = 150000;
        }
        public double getSalary() {
            return salary;
        }
        @Override
        public String toString() {
            return super.toString();
        }
        // my attempt
        @Override
        public boolean equals(Object rhs) {
            if (rhs == null) {
                return false;
            }
            if (getClass() != rhs.getClass()) {
                return false;
            }
            if (!super.equals(rhs))
                return false;
            else {
            }
            return false;
        }
    }
}

Upvotes: 1

Views: 177

Answers (2)

Kamil Tomasz Jarmusik
Kamil Tomasz Jarmusik

Reputation: 139

The NetBeans using the shortcut alt + insert, you can automatically generate the equals method, constructors, getters, setters, delegate method, and others. If you want to use the collection using encoding mixing(Hashtable, HashMap, HashSet) it with redefining equals you must also redefine the hashCode().

Upvotes: 2

Robert Moskal
Robert Moskal

Reputation: 22553

You've sort of mechanically handled the override part correctly, but the equals method of your Employee class will never return true.

First because of this:

  if (!super.equals(rhs)) return false; else { }

You'll always fall through to the final return false, even if the result of super.equals is true.

Once you fix that, you still have a problem with the equals method of Person. If you pass in an instance of Worker, that equals method will always return false.

There may yet be other things, but those two are show stoppers.

Upvotes: 2

Related Questions