当前位置: 首页 > 知识库问答 >
问题:

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

伯晨
2023-03-14

我基本上是java初学者,我想问stackoverflow论坛一个简单的问题。我已经在这里检查了类似的问题,但我没有找到想要的答案,链接:实现接口的类和该接口之间有任何关系吗?

我们知道,如果猫延伸到动物身上,这是有关系的。所以猫是一种动物(但不一定非如此。动物也是一条狗……)。我们将这种关系称为“is-a”-继承。

如果我们有另外两个班:女孩和糖果,如果女孩班有糖果的例子,那么我们将这种关系命名为“has-a”-组合,因为我们可以说女孩有一个糖果。

如果我在上面的例子中做错了什么,请纠正我。

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

public class A implements InterfaceA {}

public class B implements InterfaceA {}

如果存在某种关系,我们如何利用这种关系?感谢您提前回答。。

编辑:对于那些认为没有关系的人,我有一本书“java如何编程第九版”,还有一个UML图,显示了在“关系”中实现相同接口的类?

图片:

共有3个答案

卜弘文
2023-03-14

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

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

注意,如果要“跨越”继承层次结构,那么看看继承同一接口的两个类之间的关系,这里根本没有隐含关系。

潘国源
2023-03-14

这意味着类具有由接口方法描述的类似行为。

例如,考虑两类:鱼和鸟。它们都可以实现可移动的接口,如:

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);

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

翟缪文
2023-03-14

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

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

编辑:

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

 类似资料:
  • 问题内容: 考虑以下类层次结构: 众所周知,子类与其超类之间存在关系(is-a)。 问:有没有像“是一个”之间的任何关系和? 好的答案,但是您说过“ is-a”也是和之间的关系, 但是 “ is-a”是 类 之间的关系,并且接口不是类! 问题答案: 是。关系是完全一样的 书也是应税的。 编辑 接口是与Java的关键字(可能是C#我不知道)匹配的工件。 在OO接口中,类是“提交”的一组操作,仅此而已

  • 我有两个spring bean类实现相同的接口。 你能给我一个建议吗。

  • 问题内容: 我继承了一些旧版Java(1.4)代码,并且此设计决策会定期出现。我不知道是否有任何目的或理由。 据我了解接口(并且我的实验得到了加强),使父级和子级实现相同的接口是没有目的的。在这种情况下,from 中的所有内容都在中实现,而in中的方法在中实现。然而,这并不创造需要有落实。 关于接口,有什么我不知道的东西会给这种模式带来一些目的或好处?除了缺乏清晰性之外,还有其他潜在成本会促使其重

  • 问题内容: 此代码完美地工作。方法test()适用于两个接口。幕后到底发生了什么?在实际情况下,此功能有何用处? 问题答案: 因为它是一个接口,所以不会造成任何危害。通过实现和,您基本上是在为您的课程使用蓝图。双方并说,应实施一个名为方法 您的类实现了该方法,因此接口已完成其工作。 基本上,您的班级在说:“哦,我需要因为接口而实现”,然后您就实现了。然后您的班级说:“哦,嘿,由于接口我需要再次实现

  • 我有一个具有自动装配的接口,我有两个服务bean和,它们都实现了接口。 现在,UserInMemoryService正在使用内存存储库,而UserJpaService正在使用JPA存储库进行数据操作。问题是spring如何决定走哪条路?因为在controller中,我拥有的Autowired是一个接口,没有具体的类的细节。

  • 我有一个小组项目,我们被迫使用接口和提供的枚举。 想象一下下面的情况: