해당 메소드가 상속 (하위 클래스 및 메소드 재정의)을 사용하는 경우에만 재정의하여 사용자 정의하고자하는 클래스가있는 경우 어떻게해야합니까? 같은 목표를 달성하기 위해 어떤 방식으로 작곡을 사용할 수 있습니까?재정의시 합성 상속 사용
1
A
답변
4
예, 위임을 사용할 수 있습니다. 아래 예제에서 Foo
에서 파생되는 대신 Bar
에는 Foo
이 포함되며 선택한 위치에 위임됩니다.
interface SomeMethods {
void doSomething();
void doSomethingElse();
}
class Foo implements SomeMethod {
public void doSomething() { // implementation }
public void doSomethingElse() { // implementation }
}
class Bar implements SomeMethod {
private final Foo foo = new Foo();
public void doSomething() { foo.doSomething(); }
public void doSomethingElse() { // do something else! }
}
3
상속 대신 컴포지션을 사용하는 것이 디자인 선택입니다.
클래스가 상속을 염두에두고 설계되었거나 (즉, 최종적으로 공개되지 않고 보호 된 메소드를 제공하거나 서브 클래스로 대체되도록 의도 된) 클래스가 작성 또는 위임을 염두에두고 (전략 패턴).
클래스가 사용자 정의를 위해 설계되지 않은 경우 상속을 사용하여 사용자 정의 할 수 있지만 작성/위임 메커니즘은 사용하지 않을 수 있습니다.
3
확실히. 다음과 같은 패턴을 사용할 수 있습니다. 방법 방법의
간단한 최우선
템플릿 메소드 패턴
class Base {
public void foo() {
// do something
bar();
// do something
}
protected abstract void bar();
}
class Child {
protected void bar() {
// do something.
}
}
위임
class Base {
private Runnable r;
protected Base(Runnable r) {
this.r = r;
}
public void foo() {
r.run();
}
}
class Child extends Base {
Child() {
super(new Runnable() { /* implementation */})
}
}
관련 문제
- 1. 합성 mutator와 대입 사용
- 2. 문제 합성 키가있는 Hibernate Criteria 객체 사용
- 3. 오브젝트 지향 우수 사례 - 상속 v 합성 v 인터페이스
- 4. PostgreSQL에서 상속 사용
- 5. MSTest에서 상속 사용
- 6. 합성 문법
- 7. 합성 질문
- 8. GWT. 이미지로드 및 합성
- 9. 상속 된 클래스에서 log4j 사용
- 10. 클래스 상속 만 사용 금지
- 11. 개인 상속 사용 지시문, 과부하?
- 12. 레일즈 상속 된 리소스 사용
- 13. Verilog에서 합성 오류
- 14. iPhone - 클래스 외부에서 합성 및 병용 사용 하시겠습니까?
- 15. 참조 테이블에 기본 키 대신 추가 합성 필드 사용
- 16. 자동 합성 패턴
- 17. 합성 명령어 란 무엇입니까?
- 18. Verilog에서 $ readmem은 합성 가능합니까?
- 19. 합성 방법의 정보원은 무엇입니까?
- 20. Python에서 합성 가능 Regexp
- 21. Android 캔버스에서의 합성 작업
- 22. JavaScript 사운드 합성
- 23. Tupled 함수의 합성
- 24. GWT 합성 시각화 기다리기
- 25. iPhone 용 음성 합성
- 26. 에어 합성 DICOM
- 27. 합성 및 커버 인덱스
- 28. 노래 부 합성
- 29. 합성 숫자 찾기
- 30. 예상 식별자 '('전에 '합성'
좋아, 그래서 슈퍼 클래스는 자식 클래스와 동일한 인터페이스를 구현해야합니다? –
맞습니다. –