1

私のインストラクターは、中間テストのサンプルを投稿しましたが、次の質問について混乱しています。

サブタイプなしの継承と継承なしのサブタイプの例を示します。

以下の定義を使用し、Java でプログラミングしています: http://www.cmi.ac.in/~madhavan/courses/pl2006/lecturenotes/lecture-notes/node28.html

この 2 つの考えを表すには、どのように表現すればよいでしょうか?

4

1 に答える 1

0

サブタイピングのリストされた定義に従って:

サブタイプとは、インターフェースの互換性を指します。タイプ A のオブジェクトで呼び出すことができるすべての関数を、タイプ B のオブジェクトでも呼び出すことができる場合、タイプ B は A のサブタイプです。

Java でのサブタイピングは、基本的に Java でインターフェースを拡張または実装することに似ています。例えば:

interface Fish {
    void swim();
}

interface FlyingFish extends Fish {
    void fly();
}

トビウオは常に魚の一種であるため、FlyingFishは のサブタイプです。Fish

リストされている継承の定義に従って:

継承とは、実装の再利用を指します。B の関数が A の関数の観点から記述されている場合、型 B は別の型 A を継承します。

この定義の継承は、Java における実装の継承を指します。これは通常、サブタイピングの形式でもありますが、キャリアを進めるにつれて、設計が不十分な分類法が常にあるとは限りません。;-) 例えば:

class FlyingFish {
    void swim() {
        // implementation code to swim in water
    }

    void fly() {
        // implementation code to jump out of the water and fly
    }
}

class Bird extends FlyingFish {
    // no need to implement fly, reuse implementation of flying fish

    void swim() {
        // do nothing implementation - most birds can't swim.
    }
}

class Fish extends FlyingFish {
    void fly() {
        // do nothing implementation - most fish can't fly.
    }

    // no need to implement swim, reuse implementation of flying fish
}

ここでは、 と の両方がBirdからFish不適切に継承されFlyingFishていますが、どちらBirdFishトビウオのサブタイプではありません。

フォローアップの質問がある場合はコメントしてください。また、一見の価値があるかもしれない本は、Effective Java 2nd Ed です。ジョシュ・ボック著。この本で、Bloch はこれらのトピックに関する非常に優れた内容を提供しています。

于 2015-11-09T20:49:53.623 に答える