인수가 하위 유형 또는 상위 유형인지 여부에 따라 메소드를 오버로드하는 것이 바람직하지 않은 디자인입니까?인수가 하위 유형 또는 상위 유형인지 여부에 따라 메소드를 오버로드하는 것이 바람직하지 않은 설계입니까?
나는 수퍼 클래스 A와 서브 클래스 B를 내포하려고하고 객체들은 서로 비교할 수있다.
compareTo는 클래스 A와 클래스 B에서 두 번 오버로드되며 코드가 다소 복잡해 보입니다. 추악한 디자인 느낌. 좀 더 우아한 접근 방법이 있는지 나는 잘 모르겠습니다.
class A implements Comparable<A> {
private Integer x;
public A(Integer i) {
x = i;
}
public Integer getX() {
return x;
}
public int compareTo(A other) {
return x.compareTo(other.getX());
}
public int compareTo(B other) {
return x.compareTo(other.getX() + other.getY());
}
}
class B extends A {
private Integer y;
public B(Integer a, Integer b) {
super(a);
y = b;
}
public Integer getY() {
return y;
}
@Override
public int compareTo(A other) {
return Integer.compare(this.getX() + y, other.getX());
}
@Override
public int compareTo(B other) {
return Integer.compare(this.getX() + y, other.getX() + other.getY());
}
}
감사합니다. 매우 도움이됩니다. 코드를 개선하여 구조를 개선하는 방법을 알고 싶습니까? 고맙습니다. – CodingNow
OldCurmudgeon의 구조 조정은 서브 클래스가 'compareTo' 메소드를 대체하여 다른 것을 수행하지 않는 한 작동합니다. 'compareTo' 메서드를'final'으로 만들어서 강제 할 수 있습니다. – Brian