在OO中ISS概念基於類繼承或接口事項。IS-A是表達這句話的一種方式:”這個東西是那個東西的一種“。例如,Mustang(野馬)是一種馬,因此,以OO術語就可以說:"Mustang IS-A Horse"(野馬是一種馬),”Subaru IS-A Car“(斯巴魯是一種汽車),”Broccoli IS-A Vegetable“(椰菜是一種蔬菜)。在Java中,使用關鍵字extends(針對類繼承)和implements(針對接口實現)表達IS-A關係。
Car(汽車) 是Vehicle(交通工具)的一種,因此繼承樹可能像下面這樣從Vehicle開始:
public class Vehicle {}
public class Car extends Vehicle{}
public class Subaru extends Car{}
在OO術語中,可以這樣說:
Vehicle是Car的超類
Car是Vehicle的子類
Car是Subaru的類。
Subaru是Vehicle的子類。
Car繼承自Vehicle。
Subaru同時繼承自Vehicle和Car。
Subaru派生自Car。
Car派生自Vehicle。
Subaru派生自Vehicle。
Subaru同時是Vehicle和Car的一種子類型。
回到我們的IS-A關係,下列陳述是正確的:
”Car extends Vehicle“ 指”Car IS-A Vehicle“
"Subaru extends Car" 指 "Subaru IS-A Car"
我們還可以說:“Subaru IS-A Vehicle” ,因爲是其繼承樹中上層任何一級的“一種類型”。如果表達式(Foo instanceof Bar)的結果爲true,則及時Foo被直接擴展Bar,而是擴展屬於Bar子類的某個其他類,也存在關係“類Foo IS-A Bar”。下圖說明了Vehicle、Car和Subaru的繼承樹。箭頭從子類指向超類。換句話說,類的箭頭指向他擴展自的那個類。