2012-12-11 10 views
0

다음 다이어그램에서 AbstractPainterIPainter을 구현하는 추상 클래스입니다. ContemporaryPainterPastPainterAbstractPainter까지 확장되는 클래스입니다. 이를 고려하여 PastPainterAbstractPainterIPainter까지 확장됩니까? 아니면 AbstractPainter까지만 확장합니까?추상 클래스의 상속

감사합니다. Diagram

+0

여기에는 다이어그램이 전혀 없습니다. – corsiKa

+0

다이어그램의 그림이 표시되지 않은 몇 가지 이유가 있습니다. [link] (http://i.stack.imgur.com/zGHoE.png) –

답변

1

자바에서는 생각해 보면 올바른 방법은 추상 클래스를 확장하고 인터페이스를 구현하는 것입니다.

예를 들어 LinkedListList 인터페이스와 AbstractSequentialList을 구현합니다.

2

AbstractPainter 만 확장됩니다. 그들은 IPainter을 구현합니다. 그렇게 할 수 있습니다

IPainter painter = new PastPainter(); 
AbstractPainter otherPainter = new ContemporaryPainter(); 

그리고 여전히 유효합니다. 여전히 단어를 사용

List<? extends IPainter> list = new ... 

처럼 컬렉션을 참조 할 때

그러나, "확장". 그래도 여전히 "인터페이스 확장"이라고하지는 않습니다. 다른 인터페이스는 원래의 인터페이스를 확장

public interface IPolymath extends IPainter { 
    List<String> getOtherProfessions(); 
} 

:

유일한은 다음 코드 같은 것을 만든 경우 것 "인터페이스가 확장". 그들이 IPainter를 구현 AbstractPainter을 확장하기 때문에

+0

감사합니다. 그러나, 예를 들어, 일반적인 유형의 화가에 대한 일반적인 방법을 구현하고 싶다면 어떻게해야할까요? 또는 를 사용합니까? –

+1

어느 쪽이든 그것을 할 수 있습니다. 다른'추모자 '가 있고 그 사람들도 포함 시키길 원한다면,'T 연장 IPainter'를 사용하십시오. 그것들을 제외 시키려면,'AbstractPainter'를 사용하십시오. 당신이 가진 적이없고, 다른 어떤 것도 갖지 못한다면 그것은 중요하지 않습니다. – corsiKa

+0

신난다. 그것은 꽤 명백했다. 도와 주셔서 감사합니다! –

1

PastPainterContemporaryPainter 유형 IPainter의이다.

예 : ClassA이 구현되거나 ClassB으로 확장된다고 가정합니다. 그리고 나서 ClassC을 확장/구현하면 ClassA이 자동으로 ClassC 유형이 ClassB입니다.

모든 하위 클래스는 해당 수퍼 클래스 유형이며 수퍼 클래스가 상속 된 유형입니다.

0

의미 론적 관점에서 볼 때 인터페이스와 abtract 클래스는 중복됩니다. 추상 클래스의 정의는 충분할 것입니다. 하지만 명확한 UML 질문에 대한 답변을 따르면, AsbtractPainter 인터페이스 IPainter 직접 구현하지 않지만 추상 클래스를 당신을 전문으로하고 추상적이 아닌 클래스의 인스턴스를 않습니다. 특수 클래스가 일반적인 클래스를 대체 할 수 있다는 것을 정의하는 것도 중요합니다.