2012-11-19 54 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

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

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

如果你想将这个拟人隐喻扩展到接口,你可能会调用接口的两个实现。

相关问题