私のインストラクターは、中間テストのサンプルを投稿しましたが、次の質問について混乱しています。
サブタイプなしの継承と継承なしのサブタイプの例を示します。
以下の定義を使用し、Java でプログラミングしています: http://www.cmi.ac.in/~madhavan/courses/pl2006/lecturenotes/lecture-notes/node28.html
この 2 つの考えを表すには、どのように表現すればよいでしょうか?
私のインストラクターは、中間テストのサンプルを投稿しましたが、次の質問について混乱しています。
サブタイプなしの継承と継承なしのサブタイプの例を示します。
以下の定義を使用し、Java でプログラミングしています: http://www.cmi.ac.in/~madhavan/courses/pl2006/lecturenotes/lecture-notes/node28.html
この 2 つの考えを表すには、どのように表現すればよいでしょうか?
サブタイピングのリストされた定義に従って:
サブタイプとは、インターフェースの互換性を指します。タイプ 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
ていますが、どちらBird
もFish
トビウオのサブタイプではありません。
フォローアップの質問がある場合はコメントしてください。また、一見の価値があるかもしれない本は、Effective Java 2nd Ed です。ジョシュ・ボック著。この本で、Bloch はこれらのトピックに関する非常に優れた内容を提供しています。