如果我有4種不同的Java類型(叫他們A B C D
)和A
是B
和A
亞型是C
和B
亞型是D
和C
亞型是D
一個亞型,是這樣的法律?那裏有沒有例子?亞型的Java
繪製圖:
D
| |
| |
B C
| |
| |
A
所以d是超類型。 謝謝!
如果我有4種不同的Java類型(叫他們A B C D
)和A
是B
和A
亞型是C
和B
亞型是D
和C
亞型是D
一個亞型,是這樣的法律?那裏有沒有例子?亞型的Java
繪製圖:
D
| |
| |
B C
| |
| |
A
所以d是超類型。 謝謝!
這是不合法的繼承與作爲Java作爲一種語言不支持多重繼承。
但是,您可以通過實現多個接口來實現這一點,這與多重繼承不同。
所以是的,這是可能的,你可以做到這一點,只要你可以檢查是否有東西是一個接口的實例,但這不是一個類的類型,你的圖看起來有點不同你畫了。
你是對的:interfaces *是*「與多重繼承不同的東西」。如果OP要求「A」同時是「C」和「B」的子類型,那麼答案是確定的「否」。 – paulsm4 2013-02-12 09:17:24
在java中,這樣的圖只有在D,C和B都是接口時纔會發生。這是合法的,並將工作。一個例子 - 實現兩個接口的任何類,例如Comparable
。和Hashable
。對象是這兩個接口的共同祖先(儘管不是直接的)。
B或C可以是一個類(B實現D,C擴展D,A擴展B實現C) – 2013-02-12 09:23:30
@Andreas true。仍然在他的圖表B和C看起來對稱,這就是爲什麼我沒有提到這種情況。但是,您的評論足夠且絕對正確。 – 2013-02-12 09:25:15
這是合法嗎?
是啊。 Java不支持類的多重繼承。只有多級。
因此,A
不能從B
和C
一次繼承。
參見:Multiple Inheritance in java和How do Java Interfaces simulate multiple inheritance?
Java不支持多重繼承。
爲什麼不呢?你可以看看here。您顯示的繼承層次是典型的鑽石問題。
不可以。Java不支持多重繼承,所以'A'不能是'B'和'C'的子類型。 – 2013-02-12 09:14:10
沒有。 Java僅支持單一繼承。這是一件好事:)正確的選擇是使用「接口」。 – paulsm4 2013-02-12 09:14:23