2012-11-19 51 views
8

我幾乎java初學者,我來問一個簡單的問題stackoverflow論壇。我已經在這裏簽上如此相似的問題,但我沒有找到想要的答案,LINK:Is there any relation between the class that implements interface and that interface?實現相同接口的類之間的關係

我們知道,如果延伸動物,這裏有一個關係。所以貓是 - 一隻動物(但不一定是,動物也是一隻狗..)。我們知道這種關係爲「is-a」 - 繼承

如果我們有兩個班:女孩糖果如果類的女孩拿着糖果的實例,那麼我們稱這種關係「具有-A」 - 組成,因爲我們可以說,女孩已─糖果。

糾正我,如果我對上面的例子做錯了。

無論如何,我的問題是,如果它有實現相同接口的類的對象之間的一些關係?假設:

public class A implements InterfaceA {} 

public class B implements InterfaceA {} 

如果有某種關係,我們該如何利用這種關係?預先感謝您的回答..

編輯:對於那些認爲沒有關係的人,我有一本書「java如何編程第九版」,並有一個UML圖,它顯示類實現相同「關係」中的界面?

圖片:

enter image description here

+0

A是一個InterfaceA,我們可以通過'myObject instanceof InterfaceA'檢查它,其中myObject是A或B的實例 – hoaz

+0

我建議你閱讀[繼承構成](http://en.wikipedia.org/wiki/Composition_over_inheritance) –

+0

我很驚訝大多數回答者誤解了這個問題。這似乎很清楚。 –

回答

6

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

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

編輯:

你的UML圖表明,有接口和類(IS-A)之間的關係,但沒有哪實現同一接口的兩個類之間。在類之間沒有關係符號(就像你在類和接口之間看到的一樣)

+0

簡單的答案。感謝您澄清我的想法。 – rootpanthera

+0

@rootpanthera:很高興幫助。享受編碼。 – kosa

0

一類實施和接口,並且接口也是一個「是一個」關係,與從一個類延伸的關係。

這很有用(或者至少有一個有用的理由),因爲通過提供一個接口,您可以編寫代碼到一個接口,而不是編碼到該接口的實現,使其更容易(如果您需要)交換您的用最少的大驚小怪來實現。

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

+0

實現接口的類和該接口之間的關係最好描述爲IS關聯。如:員工IS(實施)可燃。 – gherson

1

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

例如,考慮兩個類別: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); 

他們要不就是可以移動,但它們移動的方式有很大的不同。通過這種方式,這兩個類共享共同的行爲,儘管它的實現可能不爲您所知

+0

感謝您的拯救生命。間接我得到點我錯了。 :) –

0

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

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

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

相關問題