모든 클래스의 최고 조상 클래스로 11개의 메서드를 제공하는데, 모든 객체는 Object 클래스를 상속하기 때문에 모든 메서드에서는 이 11개의 메서드를 사용할 수 있다.
하지만 경우에 따라서 오버라이딩으로 재정의해서 사용해야 한다.
public boolean equals(Object obj) {
return (this==obj);
}
객체 비교 메서드
default 로직은 동일성 비교이다.
동등성 비교를 하고자 하면 재정의를 해줘야 한다.
재정의 로직은 사용자의 임의대로 만들 수 있다.
⇒ 하지만, 기본적으로 hash를 이용한 방식을 추천하며 기본 오버라이딩 자동생성 로직도 이와같이 hash를 사용한다.
객체의 주소값을 이용해 해시코드를 만들어 반환해주는 메서드
객체간에 해시코드는 모드 유일하다.
⇒ 식별자로 사용이 가능하다는 의미
객체가 아닌 필드 역시 해시코드화가 가능하다.
⇒ 적절한 해시코드 재정의로 객체간의 동일성 비교를 할 수 있다.
public class Axe implements Weapon{
public static final Axe DEFAULT_AXE = new Axe("강철도끼", 1000L, 50);
private String name;
private long price;
private int damage;
//...
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Axe)) return false;
Axe axe = (Axe) o;
return price == axe.price && damage == axe.damage && Objects.equals(name, axe.name);
}
@Override
public int hashCode() {
return Objects.hash(name, price, damage);
}
}
public String toString() {
return getClass().getName()+"@"+Integer.toHexString(hashCode());
}