[英]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.