
⇒ 부모 클래스의 메소드가 실행 ( 모든클래스는 Object클래스를 상속받는다. )

메모리가 다르다 ⇒ 동일 비교
개념적으로 다르다 ⇒ 동등 비교 → 부모클래스인 Object의 equals() 오버라이딩 해서 사용

⇒ Object클래스의 equals 메소드 ( 원래 동일비교 )

→ Object에서 o를 다운캐스팅 ( Object는 부모 )
public boolean equals(Object o)
Objectequals는 Object에 정의되어 있기 때문에 시그니처를 그대로 둬야 오버라이딩이 가능Object o로 옴예시:
Animal a1 = new Rabbit(); // 업캐스팅 (자식 → 부모) : 항상 가능
Rabbit r1 = (Rabbit) a1; // 다운캐스팅 : OK (실제 객체가 Rabbit이라 안전)
Animal a2 = new Animal(); // 부모 객체
Rabbit r2 = (Rabbit) a2; // 다운캐스팅 : 런타임 오류(ClassCastException)