에서 '정적'코드를 분리하기 위해 상속을 사용하는 청소기 방법 현재에 붙어. 코드 흐름을 추적하기 어려워지는 구성 요소 간의 복잡한 상호 작용을 포함하는 응용 프로그램을 작성하고 있습니다. 이를 단순화하기 위해 각 레이어가 위에있는 레이어와 비교하여 기능이 향상 된 '레이어'를 만들어 코드를 구조화하려고합니다. 각 레이어는 패키지에 포함되어 있습니다. 향상된 기능과 함께 다음과 같은 두 클래스와 그 서브 클래스를 고려내가 난 이상한 약간의 문제가</p> <p>(I 코드 변경 취약인지 구별을 의미하는 정적 및 동적으로) '동적'코드
: 나는 다음과 같은 문제에 봉착
클래스 A :
package layer;
class A {
B b;
A() {
b = new B();
}
void foo() {
b.foo();
}
/* More A-class methods here */
}
클래스 B :
package layer;
class B {
void foo() {
// Do something
}
/* More B-class methods here */
}
서브 클래스 A를 :
package sublayer;
class ASub extends A {
ASub() {
super.b = new BSub(); // This needs a cast to compile
}
}
개
서브 클래스 B : 난 그냥 인스턴스화 실제로 클래스 A와 B 자체 코드를 수정하지 않고도 상위 클래스 A와 B의 모든 방법을 사용할 수있는 클래스 ASUB 및 BSUB을 수정하려는 결국
package sublayer;
class BSub extends B {
@Override
void foo() {
// Do something with more functionality
}
}
. 내가 new ASub().foo()
를 호출하면
, 나는 당연히 내가 ASUB에서 변수 BSub bsub
를 추가하고 bsub.foo()
를 호출하는 A의 foo는() 메소드를 재정의 할 수 있습니다 대신 B.의의 실행 BSUB의 오버라이드 (override) foo는()를 원하지만이 나던 피하기는 객체의 생성은 A의 생성자에 b
을 만들었습니다. 이것은 엉성한 코딩으로 보입니다. 이것에 대한 어떤 생각? 모든 의견을 환영합니다.
다른 방법이 없다면이 방법을 시도해 볼 것입니다. 너무 추한 것처럼 보이지는 않지만 해킹과 같은 느낌입니다. 감사합니다! – user2443647