2013-06-05 6 views
-1

자주 업데이트되는 응용 프로그램 x가 있고 패키지 y로이 응용 프로그램을 수정해야한다고 가정 해 보겠습니다. Overriding Classes

는 (?이 작업을 수행하는 더 나은 방법이) 내가 X의 주요 클래스 중 하나를 수정 실행, 내 패키지 y를 얻으려면. 나는이 시점 이후로 내가 할 수있는 최소한의 편집을하려고 노력한다. 왜냐하면 x 업데이트를하면 쉽게 수정 내용을 복사하고 y에 호출을 추가 할 수 있기 때문입니다.

지금 내가 더 좋은 TTF 폰트를 사용하는 X의 폰트 렌더링을 수정해야하는 문제가 건너 한,이 X의 전체 클래스를 수정 entale 것입니다.

X에 Y를 참조하지 않고 Y에서 X의 클래스 먹으 렴를 오버라이드 (override) 할 수있는 방법이 있습니까? 나는 X의 전체 클래스를 제거하고 그것을 대체 생각하고하는 것은 X가 사전에

감사합니다, 요르단 업데이트되는 때이

+3

코드를 간단한 예제로 압축 할 수 있습니까? 내가 클래스가 확실하지 해요 @jlordo – jlordo

+0

... 당신은 지금 무엇에 관해 얘기하는지 단서가 없다'A'와'B'는있다 'x'와'y'보다 더 명확합니다. –

+1

에 B를 참조하지 않고 클래스 B와 이것을 호출 할 수 있습니다 교체해야 – GriffeyDog

답변

0

는이 라인을 따라 뭔가를 만들어 내 머리에 추가적인 부담을 줄 것 뿐이다 확장 :

public class x{ some schtuff} 

는이 작업을 수행 :이 도움이

Public class y extends x { other stuff} 

희망, 내 아들이 같은 문제가 있었다!

3

매우 일반적인 용어로 문제를 설명 했으므로 일반적으로 대답 할 수 있습니다. 다양한 구조 패턴을 살펴 봐야합니다. facade pattern은 프로그램 (패키지 y)의 한 섹션에있는 코드를 다른 패키지 (패키지 x)에서 변경하지 못하도록 고안되었습니다. x에 대한 많은 변경 사항은 외관을 업데이트하기 만하면 y 패키지의 다른 내용은 변경해야합니다.

관련 패턴은 adapter patterndecorator pattern 있습니다.

는 설명 것을 감안할 때, 나는 서브 클래 싱을 피하는 건의 할 것입니다. 그것은 당신이 원하는 것보다 더 많은 의존성을 생성합니다.

+0

먼저 클래스를 초기화하지 않고 클래스를 재정의 할 수있는 방법이 있습니까? 나는 외관을 사용하는 것이 내가 필요한 것에 매우 가깝다고 생각하지만 기본 패키지를 많이 편집해야 할 것입니다. –

+0

@JordanDoyle - 외관 패턴의 아이디어는 백킹 코드 (패키지 x)를 전혀 수정할 필요가 없다는 것입니다. (또는 패키지 y를 수정하는 것에 대해 이야기하고 있습니까?) 클래스를 재정의하면 기본 클래스 생성자가 파생 클래스의 각 생성자 실행의 첫 번째 단계로 항상 (명시 적으로 또는 암시 적으로) 호출됩니다. 따라서 귀하의 질문을 이해한다면 : 아니오, 클래스를 우선 초기화하지 않고 클래스를 재정의 할 수있는 방법이 없습니다. Facade 패턴은 클래스 멤버를 초기화해야 할 때마다 초기화 할 수 있습니다. –

+0

원본 백킹 코드 인 패키지 X는 이미 외관을 가지고 있으며 나중에 스크립트 실행시 내 코드가 호출되지만 백업 코드의 작동 방식은 다른 클래스의 매개 변수로 오버라이드해야 할 클래스를 전달하는 것입니다. 내 꾸러미가 너무 늦었 어. –