Closed NuhGnod closed 1 year ago
저도 이 문장이 잘 이해가 되지 않아서 코드로 풀어보려고 노력했지만 어렵네요ㅜㅜ
대신 직관적으로 이해해보자면,, 상위 클래스를 인스턴스화 할 수 있는 경우
아래와 같이 상위 클래스로 equals() 메시지를 전달해주잖아요? (Point는 ColorPoint의 상위 클래스이므로 해당 인스턴스가 ColorPoint가 아니면 Point일 것이라는 가정 하에)
public class ColorPoint extends Point {
@Override
public boolean equals(Object o) {
if (!(o instanceof Point)) {
return false;
}
if (!(o instanceof ColorPoint)) {
return o.equals(this);
}
return ...;
}
}
그런데 만약 Point 클래스가 abstract 이면, 주어진 객체가 ColorPoint가 아니면 무조건 다른 객체이므로 (상위에 인스턴스가 존재할 수 없으므로) 메시지를 전달해 상위 클래스에서 값이 같은지를 확인할 필요가 없게 됩니다. 같은 이유로 instanceof 와 getClass()의 차이로 발생하는 문제도 해결될 수 있을 것 같아요.
그래서 값을 갖지 않는 추상 클래스의 하위 클래스
에서는 책에서 언급한 문제들이 발생하지 않는다고 한게 아닌가 생각합니다!
p.60에서 맨아래에 체크박스의
추상 클래스의 하위 클래스에서라면 equals규약을 지키면서도 값을 추가할 수 있다.
부분입니다. 위 문장이 잘 이해가 되지않네요!