0

次の図で、AbstractPainterは を実装する抽象クラスIPainterです。ContemporaryPainterPastPainterは、 を拡張するクラスですAbstractPainter。これを考慮して、?PastPainterAbstractPainter拡張します。IPainterそれとも拡張するだけAbstractPainterですか?

ありがとう!ダイアグラム

4

4 に答える 4

2

それらは拡張するだけAbstractPainterです。彼らは実装しIPainterます。だからあなたはできる

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

そして、それはまだ有効です。

ただし、コレクションでそれらを参照する場合は、

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

それはまだ「拡張」という言葉を使用しています。ただし、それを「インターフェースの拡張」とは呼びません。

唯一の「インターフェースを拡張する」のは、次のスニペットのようなものを作成した場合です。

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

他のインターフェイスが元のインターフェイスを拡張する場所。

于 2012-12-11T18:40:22.427 に答える
1

はいPastPainter、実装する拡張機能があるためContemporaryPainter、タイプです。IPainterAbstractPainterIPainter

ClassA例:実装または拡張のいずれかを想定しますClassB。そして、ClassCextends/implementsの場合はClassA自動的ClassCにのタイプでもありClassBます。

すべてのサブクラスは、そのスーパークラスと同じタイプであり、そのスーパークラスが継承されているタイプでもあります。

于 2012-12-11T18:44:30.313 に答える
1

Java では、抽象クラスを拡張してインターフェースを実装するというのが正しい考え方です。

たとえば、 aはインターフェイスと をLinkedList実装します。ListAbstractSequentialList

于 2012-12-11T18:39:53.587 に答える