实现相同接口的类之间的关系

时间:2012-11-19 16:26:47

标签: java relationship

我几乎是java初学者,我来问stackoverflow论坛一个简单的问题。我已经在SO上检查了类似的问题,但我找不到想要的答案,LINK:Is there any relation between the class that implements interface and that interface?

我们知道 Cat 是否扩展了 Animal ,这里有一个关系。所以猫是动物(但不一定是动物。动物也是狗......)。我们知道这种关系是“is-a” - 继承

如果我们还有另外两个班级:女孩 Candy ,如果班级女孩持有Candy的实例,那么我们将此关系命名为“has-a” - 作文,因为我们可以说女孩有一个糖果。

如果我上面的例子出了问题,请纠正我。

无论如何,我的问题是它是否在实现相同接口的类的对象之间存在某种关系?让我们说:

public class A implements InterfaceA {}

public class B implements InterfaceA {}

如果存在某种关系,我们如何利用这种关系?谢谢你的答案..

编辑:对于那些认为没有关系的人,我有一本书“java如何编写第九版”,并且有一个UML图表显示在“关系”中实现相同界面的类?

图像:

enter image description here

4 个答案:

答案 0 :(得分:6)

实现相同接口的对象之间没有关系。两者都是他们自己的独立实现。它们只是遵循接口定义的协议。

如果您尝试从一种对象类型转换为另一种对象类型,则最终会获得ClassCastException

修改

您的UML图表明接口和类(IS-A)之间存在关系,但实现相同接口的两个类之间不存在关系。类之间没有关系符号的行(就像你在类和接口之间看到的那样)

答案 1 :(得分: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);

所以他们中的任何一个都可以移动,尽管他们移动的方式差别很大。这样,两个类都有共同的行为,但您可能不知道它的实现。

答案 2 :(得分:0)

类实现和接口之间的关系,以及接口也是一个“is-a”关系,与从类扩展相同。

它很有用(或者至少有一个它有用的原因),因为通过提供接口,您可以编写接口而不是代码到该接口的实现,从而轻松(如果您需要)交换您的实现最小化。

请注意,如果您要跨越继承层次结构,那么查看继承相同接口的两个类之间的关系,这里根本就没有隐式关系。

答案 3 :(得分:0)

实现相同接口的两个类之间的关系没有正式名称。

或者,就此而言,它扩展了相同的基类。如果延伸另一个孩子的孩子是其孩子,那么同一个班级的两个孩子是兄弟姐妹,但这不是通常使用的术语。

如果你想将这个拟人化的比喻扩展到接口,你可以调用两个接口相似的实现。