java中的子类型

java中的子类型,java,subtype,Java,Subtype,如果我有4种不同的Java类型(称它们为ABCD),并且A是B的子类型,A是C的子类型,B是D的子类型,C是D的子类型,这合法吗?有什么例子吗 绘制图表: D | | | | B C | | | | A 所以D是超型。 谢谢 在java中,只有当D、C和B都是接口时,才会出现这种图。这是合法的,而且会起作用。示例—实现两个接口的任何类

如果我有4种不同的Java类型(称它们为
ABCD
),并且
A
B
的子类型,
A
C
的子类型,
B
D
的子类型,
C
D
的子类型,这合法吗?有什么例子吗

绘制图表:

           D
          | |  
        |     |
       B       C
        |     |
          | |
           A
所以D是超型。
谢谢

在java中,只有当D、C和B都是接口时,才会出现这种图。这是合法的,而且会起作用。示例—实现两个接口的任何类,例如
Comparable
。和
哈希表
。对象是这两个接口的共同祖先(尽管不是直接的)

这合法吗

是的。Java不支持类的多重继承。只有多级

因此,
A
不能同时从
B
C
继承


请参阅:和

这对于继承是不合法的,因为Java作为一种语言不支持多重继承

但是,您可以通过实现多个接口来实现这一点,这与多重继承不同


因此,是的,您可以这样做,只要您可以检查某个对象是否是接口的实例,但这与类类型不同,并且您的图表看起来与您绘制的图表略有不同。

Java不支持多重继承


为什么不呢?你可以看看。您显示的继承层次结构是典型的菱形问题。

否。Java不支持多重继承,因此
A
不能同时是
B
C
的子类型。否。Java只支持单一继承。这是一件好事:)正确的选择是使用“接口”。你是对的:接口是“与多重继承不同的东西”。如果OP希望“A”同时成为“C”和“B”的子类型,那么答案是肯定的“否”。B或C可以是类(B实现D,C扩展D,A扩展B实现C)@Andreas true。在他的图表上,B和C看起来是对称的,这就是为什么我没有提到这个案例。然而,你的评论是充分和绝对正确的。