簡體   English   中英

實現相同接口的類之間的關系

[英]Relationships between classes that implement same interface

我幾乎是java初學者,我來問stackoverflow論壇一個簡單的問題。 我已經在SO上檢查了類似的問題,但是我沒有找到想要的答案,LINK: 實現接口的類和那個接口之間有什么關系嗎?

我們知道Cat是否擴展了Animal ,這里有一種關系。 所以貓是動物(但不一定是動物。動物也是狗......)。 我們知道這種關系是“是一種” - 繼承

如果我們還有另外兩個班級: GirlCandy ,如果班級Girl持有Candy的實例,那么我們將這種關系命名為“has-a” - 組合 ,因為我們可以說Girls有一個糖果。

如果我上面的例子弄錯了,請糾正我。

無論如何,我的問題是它是否在實現相同接口的類的對象之間存在某種關系? 讓我們說:

public class A implements InterfaceA {}

public class B implements InterfaceA {}

如果有某種關系,我們如何利用這種關系? 感謝您提前的答案..

編輯:對於那些認為沒有關系的人,我有一本書“java如何編程第九版”,並且有一個UML圖表顯示在“關系”中實現相同界面的類?

圖片:

在此輸入圖像描述

實現相同接口的對象之間沒有關系。 兩者都是他們自己的獨立實現。 它們只是遵循接口定義的協議。

如果您嘗試從一種對象類型轉換為另一種對象類型,最終將獲得ClassCastException

編輯:

您的UML圖表明接口和類(IS-A)之間存在關系,但實現相同接口的兩個類之間不存在關系。 類之間沒有關系符號的行(就像你在類和接口之間看到的那樣)

這意味着您的類具有接口方法描述的類似行為。

例如,考慮兩個類: FishBird 它們都可以實現接口Moveable如:

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);

所以他們中的任何一個都可以移動,盡管他們移動的方式差別很大。 這樣,兩個類都有共同的行為,盡管您可能不了解它的實現。

類實現和接口之間的關系,以及接口也是一種“is-a”關系,與從類擴展相同。

它是有用的(或者至少有一個它有用的原因),因為通過提供一個接口,你可以編寫一個接口而不是代碼到該接口的實現,這樣就可以很容易地(如果你需要)將你的實現交換到最小化。

請注意,如果您要跨越繼承層次結構,那么查看繼承相同接口的兩個類之間的關系,這里根本就沒有隱式關系。

實現相同接口的兩個類之間的關系沒有正式名稱。

或者,就此而言,它擴展了相同的基類。 如果延伸另一個孩子的孩子是其孩子,那么同一班級的兩個孩子是兄弟姐妹,但這不是通常使用的術語。

如果你想將這個擬人化的隱喻擴展到接口,你可以調用兩個接口相似的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM