Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java允许从接口而不是从抽象/具体类进行多重继承_Java_Inheritance_Abstract Class - Fatal编程技术网

为什么Java允许从接口而不是从抽象/具体类进行多重继承

为什么Java允许从接口而不是从抽象/具体类进行多重继承,java,inheritance,abstract-class,Java,Inheritance,Abstract Class,可能重复: 为什么Java允许从接口而不是从抽象类或具体类进行多重继承 例如,如果一个类从两个不同的基类继承同一方法的两个不同实现,该怎么办 为了避免这些问题,Java不支持此功能。 与具体类不同,接口不能有方法体 因此,这些问题都不适用于接口。我真的不喜欢这里的“继承”一词,它会导致很多混乱 Java只允许接口扩展其他接口,并允许类实现接口 如果将接口视为一组数学声明,那么每个“扩展”仅提供来自超级接口的集合与当前接口的集合的并集。因此,您可以进行多个“联合” 当您最终到达一个实现一个或多个

可能重复:


为什么Java允许从接口而不是从抽象类或具体类进行多重继承

例如,如果一个类从两个不同的基类继承同一方法的两个不同实现,该怎么办

为了避免这些问题,Java不支持此功能。
与具体类不同,接口不能有方法体


因此,这些问题都不适用于接口。

我真的不喜欢这里的“继承”一词,它会导致很多混乱

Java只允许接口扩展其他接口,并允许类实现接口

如果将接口视为一组数学声明,那么每个“扩展”仅提供来自超级接口的集合与当前接口的集合的并集。因此,您可以进行多个“联合”

当您最终到达一个实现一个或多个接口的类时,这里的语义仅仅是该类必须为集合中的所有方法提供实现。实现多个接口的类可以重写为实现扩展上述所有接口的单个接口的类


在类继承多个类的情况下,这是不允许的,因为它会导致各种问题,包括菱形问题。例如,如果我有两个具有相同方法签名的不同实现的超类型,那么在子类型中应该使用哪一个?

以使语言更简单、更优雅。C++允许很多东西,但学习和使用往往是痛苦的。我们(至少是我)不希望java变成这样。

因为实现接口不是继承。它只是意味着类将遵守预定义的约定,通常是提供一组与特定功能相关的方法。任何类都可以遵守许多这样的契约而不发生冲突(除非其中两个接口定义了相同的方法)

与继承不同,它不会自动接收属性或功能,因为它与超类存在层次关系,因为不存在这种关系


由于前面提到的菱形继承问题,Java或许多其他OO语言基本上不允许多重继承。

Duplicate of想要补充的是,这些问题是可以解决的(就像在许多其他语言中一样),只是这样做没有多大意义。我将告诉你为什么有人可能对此投了反对票。Bcz这仍然不能回答为什么的问题?您可以看到,我可以使用相同的命名方法拥有两个单独的接口。但是当我在一个类中实现这两者时。。。由于冲突,IDE将要求您越位并创建自己的。现在,如果我正在扩展的两个类具有相同的方法,为什么Java不要求重写并编写自己的类呢???