다음 다이어그램에서 AbstractPainter
은 IPainter
을 구현하는 추상 클래스입니다. ContemporaryPainter
및 PastPainter
은 AbstractPainter
까지 확장되는 클래스입니다. 이를 고려하여 PastPainter
및 AbstractPainter
은 IPainter
까지 확장됩니까? 아니면 AbstractPainter
까지만 확장합니까?추상 클래스의 상속
감사합니다.
다음 다이어그램에서 AbstractPainter
은 IPainter
을 구현하는 추상 클래스입니다. ContemporaryPainter
및 PastPainter
은 AbstractPainter
까지 확장되는 클래스입니다. 이를 고려하여 PastPainter
및 AbstractPainter
은 IPainter
까지 확장됩니까? 아니면 AbstractPainter
까지만 확장합니까?추상 클래스의 상속
감사합니다.
자바에서는 생각해 보면 올바른 방법은 추상 클래스를 확장하고 인터페이스를 구현하는 것입니다.
예를 들어 LinkedList
은 List
인터페이스와 AbstractSequentialList
을 구현합니다.
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
을 확장하기 때문에
감사합니다. 그러나, 예를 들어, 일반적인 유형의 화가에 대한 일반적인 방법을 구현하고 싶다면 어떻게해야할까요?
어느 쪽이든 그것을 할 수 있습니다. 다른'추모자 '가 있고 그 사람들도 포함 시키길 원한다면,'T 연장 IPainter'를 사용하십시오. 그것들을 제외 시키려면,'AbstractPainter'를 사용하십시오. 당신이 가진 적이없고, 다른 어떤 것도 갖지 못한다면 그것은 중요하지 않습니다. – corsiKa
신난다. 그것은 꽤 명백했다. 도와 주셔서 감사합니다! –
예 PastPainter
및 ContemporaryPainter
유형 IPainter
의이다.
예 : ClassA
이 구현되거나 ClassB
으로 확장된다고 가정합니다. 그리고 나서 ClassC
을 확장/구현하면 ClassA
이 자동으로 ClassC
유형이 ClassB
입니다.
모든 하위 클래스는 해당 수퍼 클래스 유형이며 수퍼 클래스가 상속 된 유형입니다.
의미 론적 관점에서 볼 때 인터페이스와 abtract 클래스는 중복됩니다. 추상 클래스의 정의는 충분할 것입니다. 하지만 명확한 UML 질문에 대한 답변을 따르면, AsbtractPainter 인터페이스 IPainter 직접 구현하지 않지만 추상 클래스를 당신을 전문으로하고 추상적이 아닌 클래스의 인스턴스를 않습니다. 특수 클래스가 일반적인 클래스를 대체 할 수 있다는 것을 정의하는 것도 중요합니다.
여기에는 다이어그램이 전혀 없습니다. – corsiKa
다이어그램의 그림이 표시되지 않은 몇 가지 이유가 있습니다. [link] (http://i.stack.imgur.com/zGHoE.png) –