10

私はほとんどJavaの初心者であり、stackoverflowフォーラムに1つの簡単な質問をするようになりました。SOで同様の質問をすでに確認しましたが、目的の答えが見つかりませんでした。LINK:インターフェイスを実装するクラスとそのインターフェイスの間に関係はありますか?

猫が動物を拡張するかどうかはわかっていますが、ここには関係があります。つまり、猫は-動物です(ただし、必ずしもそうではありません。動物は犬でもあります。)。この関係は「is-a」-継承として知られています。

GirlCandyの2つのクラスがあり、クラスGirlがCandyのインスタンスを保持している場合、Girls has-a Candyと言えるので、この関係に「has-a」-compositionという名前を付けます。

上記の例で何か間違ったことをした場合は、私を訂正してください。

とにかく私の質問は、同じインターフェースを実装するクラスのオブジェクト間に何らかの関係があるかどうかです。まあ言ってみれば:

public class A implements InterfaceA {}

public class B implements InterfaceA {}

何らかの関係がある場合、その関係をどのように活用できますか?よろしくお願いします。

編集:関係がないと思う人のために、私は「java第9版のプログラミング方法」という本を持っていて、「関係」で同じインターフェースを実装するクラスを示すUML図がありますか?

画像:

ここに画像の説明を入力してください

4

4 に答える 4

6

同じインターフェースを実装するオブジェクト間に関係はありません。どちらも独自の独立した実装です。インターフェイスで定義されたプロトコルに従うだけです。

あるオブジェクト タイプから別のオブジェクト タイプにキャストしようとすると、最終的にClassCastException.

編集:

あなたのUMLダイアグラムは、インターフェースとクラス(IS-A)の間に関係があることを示唆していますが、同じインターフェースを実装する2つのクラスの間には関係がありません。クラス間の関係記号の線はありません (クラスとインターフェースの間に見られるように)

于 2012-11-19T16:28:51.163 に答える
3

これは、クラスがインターフェイスメソッドによって記述された同様の動作をすることを意味します。

たとえば、次の2つのクラスについて考えてみFishますBirdMoveableどちらも次のようなインターフェースを実装できます。

inteface Moveable{
    void move(int x, int y, int z);
}

class Fish implements Moveable{
    public void move(int x, int y, int z){
       swim(x, y, z); 
   }
    private void swim(int x, int y, int z){
      //a method describing how the fish swims
    }
}

class Bird implements Moveable{
    public void move(int x, int y, int z){
       fly(x, y, z); 
   }

    private void fly(int x, int y, int z){
      //a method describing how the bird flies
    }
}

次のようなインターフェイスメソッドで指定された動作を呼び出すことができます。

Moveable bird = new Bird();
Moveable fish = new Fish();

bird.move(10,10,10);
fish.move(10,10,-10);

したがって、どちらも移動できますが、移動方法は大きく異なります。このように、両方のクラスは共通の動作を共有しますが、その実装は不明な場合があります。

于 2012-11-19T16:38:18.060 に答える
0

クラスの実装とインターフェースの関係、およびインターフェースも「is-a」の関係であり、クラスから拡張するのと同じです。

インターフェイスを提供することにより、そのインターフェイスの実装にコーディングするのではなく、インターフェイスにコーディングできるため、便利です (または少なくとも 1 つの理由)。最小限の騒ぎ。

継承階層を「横断」する場合、つまり同じインターフェースを継承する 2 つのクラス間の関係を見ると、ここには暗黙の関係がまったくないことに注意してください。

于 2012-11-19T16:28:33.027 に答える
0

同じインターフェースを実装する 2 つのクラス間の関係に正式な名前はありません。

または、さらに言えば、同じ基本クラスを拡張します。別のものを拡張する子がその子である場合、同じクラスの 2 つの子は兄弟ですが、これは一般的に使用される用語ではありません。

この擬人化された比喩をインターフェイスに拡張したい場合は、インターフェイスの 2 つの実装を似たものと呼ぶことができます。

于 2012-11-19T17:35:35.850 に答える