在閱讀Horstmann's book,我已經在Java中遇到了這個約亞型關係:java的亞型關係
S is a subtype of T if:
S is an array type and T is Cloneable or Serializable
我無法真正瞭解這是應該的意思。誰能幫忙?
謝謝!
在閱讀Horstmann's book,我已經在Java中遇到了這個約亞型關係:java的亞型關係
S is a subtype of T if:
S is an array type and T is Cloneable or Serializable
我無法真正瞭解這是應該的意思。誰能幫忙?
謝謝!
這是子類型的一個簡單示例。
Array
類型實現了Cloneable
和Serializable
接口。
但是,這些接口沒有指定任何方法作爲方法合同的一部分。實際上,這些只是標記接口,它們的存在爲您的類的編譯器和用戶提供了詳細信息,而不直接需要任何功能。
例如:
注意這個接口不包含clone方法。因此,僅憑藉其實現此接口的事實來克隆對象是不可能的。即使克隆方法是反射式調用,也不能保證它會成功。
我熟悉這些接口。但是,我可以將任何數組類型分配給實現Cloneable或Serializable的類,如果存在子類型關係,我應該可以做到這一點? – sha1
@ErcanOzturk實際上可能不是,因爲'java.lang.reflect.Array'沒有實現這些接口,因此你的問題中的語句對於那個位是不真實的。 – hexafraction
那我該如何使用這種子類型關係?我們只是說那裏「是」是一種亞型關係嗎? – sha1
我認爲是什麼原因造成你的困惑是,「可複製」和「序列化」是在英語語言屬性,而那句「是Cloneable
」通常用來表示一個類實現了Cloneable
接口。然而,這裏它們只有只有表示接口名稱Cloneable
和Serializable
,並且「is」被理解爲「是」正好是 /等於「。也就是說,如果T
是接口Cloneable
或者如果T
是接口Serializable
,則任何陣列類型都是T
的子類型。
一種array type
是任何類型的形式U[]
,其中U
是任意類型,即非void
原始或引用類型(注意,一個數組類型,即使是原始類型的,也就是一個引用類型)。這與java.lang.reflect.Array
類沒有任何關係,這是而不是的數組類型!
不能分配任何數組實現Cloneable
或Serializable
類的參考變量,但只的恰好類型Cloneable
或Serializable
參考變量。因此,如果你有
int[] a = ...; // primitive array
Object[] b = ...; // reference type array
int[][] c = ...; // reference type array, since int[] is a reference type
再下面是合法的:
Cloneable x = a; x = b; x = c;
Serializable y = a; y = b; y = c;
我覺得你沒有給我們的所有信息 – aaronman
需要更多一點的上下文 – Gus
S和T是同一類型 S和T都是類的類型,T是S的直接或間接超類S是一個類類型,T是一個接口類型,S或它的一個超類實現T和S都是接口類型, 一個nd T是直接或間接超接口S S和T都是陣列類型,S的組件類型是組件類型的子類型T S不是原始類型,T是類型對象 S是空類型,T不是原始類型 這些是子類型關係的其他示例。它有幫助嗎? – sha1