我几乎是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图表显示在“关系”中实现相同界面的类?图像:
答案 0 :(得分:6)
实现相同接口的对象之间没有关系。两者都是他们自己的独立实现。它们只是遵循接口定义的协议。
如果您尝试从一种对象类型转换为另一种对象类型,则最终会获得ClassCastException
。
修改强>
您的UML图表明接口和类(IS-A)之间存在关系,但实现相同接口的两个类之间不存在关系。类之间没有关系符号的行(就像你在类和接口之间看到的那样)
答案 1 :(得分:1)
这意味着您的类具有接口方法描述的类似行为。
例如,考虑两个类: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);
所以他们中的任何一个都可以移动,尽管他们移动的方式差别很大。这样,两个类都有共同的行为,但您可能不知道它的实现。
答案 2 :(得分:0)
类实现和接口之间的关系,以及接口也是一个“is-a”关系,与从类扩展相同。
它很有用(或者至少有一个它有用的原因),因为通过提供接口,您可以编写接口而不是代码到该接口的实现,从而轻松(如果您需要)交换您的实现最小化。
请注意,如果您要跨越继承层次结构,那么查看继承相同接口的两个类之间的关系,这里根本就没有隐式关系。
答案 3 :(得分:0)
实现相同接口的两个类之间的关系没有正式名称。
或者,就此而言,它扩展了相同的基类。如果延伸另一个孩子的孩子是其孩子,那么同一个班级的两个孩子是兄弟姐妹,但这不是通常使用的术语。
如果你想将这个拟人化的比喻扩展到接口,你可以调用两个接口相似的实现。