[英]Relationships between classes that implement same interface
我幾乎是java初學者,我來問stackoverflow論壇一個簡單的問題。 我已經在SO上檢查了類似的問題,但是我沒有找到想要的答案,LINK: 實現接口的類和那個接口之間有什么關系嗎?
我們知道Cat是否擴展了Animal ,這里有一種關系。 所以貓是動物(但不一定是動物。動物也是狗......)。 我們知道這種關系是“是一種” - 繼承 。
如果我們還有另外兩個班級: Girl和Candy ,如果班級Girl持有Candy的實例,那么我們將這種關系命名為“has-a” - 組合 ,因為我們可以說Girls有一個糖果。
如果我上面的例子弄錯了,請糾正我。
無論如何,我的問題是它是否在實現相同接口的類的對象之間存在某種關系? 讓我們說:
public class A implements InterfaceA {}
public class B implements InterfaceA {}
如果有某種關系,我們如何利用這種關系? 感謝您提前的答案..
編輯:對於那些認為沒有關系的人,我有一本書“java如何編程第九版”,並且有一個UML圖表顯示在“關系”中實現相同界面的類?
圖片:
實現相同接口的對象之間沒有關系。 兩者都是他們自己的獨立實現。 它們只是遵循接口定義的協議。
如果您嘗試從一種對象類型轉換為另一種對象類型,最終將獲得ClassCastException
。
編輯:
您的UML圖表明接口和類(IS-A)之間存在關系,但實現相同接口的兩個類之間不存在關系。 類之間沒有關系符號的行(就像你在類和接口之間看到的那樣)
這意味着您的類具有接口方法描述的類似行為。
例如,考慮兩個類: Fish
和Bird
。 它們都可以實現接口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.