이 코드에서 봐 상속 클래스의 필드를 포함OOP 디자인 : 클래스의 상속 클래스를 다른 클래스
public static class A {
public void doA() {
}
}
public static class B extends A {
public void doB() {
}
}
public static class AE {
protected A field;
public AE(A field) {
this.field = field;
}
public void doStuff() {
field.doA();
}
}
public static class BE extends AE {
// wanna have B field;
public BE(B field) {
super(field);
}
public void doAnotherStuff() {
field.doA();
field.doB(); // error here
}
}
같은 디자인 문제에 대한 최선의 해결책은 무엇인가? 나는 두 가지 옵션을 참조하십시오 1)) DOB()
((B) field).doB();
이 전화 BE 클래스 FO 다른 필드로 B를 저장하고 생년월일을 필요로 할 때 (이 필드를 호출 할 필요가있을 때 B 형 필드 매번 캐스팅) 기능 :
protected B field2;
public BE(B field) {
super(field);
field2 = field;
}
두 가지 해결책은 모두 분명하고 좋지 않습니다. 경우 1) 런타임 캐스팅에서 성능이 손실되고 캐스팅 필드가 매번 오류처럼 보입니다. 경우 2) 정확히 동일한 객체 B에 대한 포인터를 포함하는 BE 클래스의 두 필드가 있으며 유형 (필드는 클래스 A의 필드와 클래스 B의 필드 2)에서만 다릅니다. 이 문제에 대한 더 나은 해결책이 있습니까?
제네릭을 사용할 수 있습니다. – Neilos