繁体   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