當我創建一個新的類,它是Java中的每個子類都從兩個類(Object及其超類)繼承?
ClassA extends Object{
}
所以,如果我有從的ClassA ClassB的繼承,那豈不是
ClassA extends Object extends ClassB {
}
這基本上是多重繼承,是不是允許在Java中。
或者對於Object類有一個特殊的例外,這意味着它確實可以安全地說,Java中的每個基類繼承了兩個類?
當我創建一個新的類,它是Java中的每個子類都從兩個類(Object及其超類)繼承?
ClassA extends Object{
}
所以,如果我有從的ClassA ClassB的繼承,那豈不是
ClassA extends Object extends ClassB {
}
這基本上是多重繼承,是不是允許在Java中。
或者對於Object類有一個特殊的例外,這意味着它確實可以安全地說,Java中的每個基類繼承了兩個類?
第
這將是ClassA繼承自繼承自Object的ClassB。
這不是多重繼承。這是單一繼承。單繼承給你的排序鏈的:
Object -> ClassB -> ClassA
多重繼承讓你做更多的樹:
Object -> ClassB \
---> ClassA
Object -> ClassC/
Java並不讓你做後者。你可以得到最接近的是實現多個接口。
注意,這仍然是OK(單繼承),因爲每類最多有一個直接基:
/--> ClassC
Object -> ClassB -
\--> ClassD
另外,回答你直接的問題,JLS 8.1.4 states(重點煤礦):
給定一個...類聲明...類類型C ...的直接超類是如果存在extends子句,則在C的聲明的extends子句中給出的類型,否則爲Object。
也就是說,它仍然是單一繼承。如果你有一個extends
那麼這就是基類,否則基數是Object
。在你的例子中,ClassA
沒有Object
作爲直接基地。
你也可以嘗試一下自己。 Check out this example:
static class ClassB {
}
static class ClassA extends ClassB {
}
static void printHierarchy (Class<?> clz) {
if (clz != null) {
System.out.println(clz.getSimpleName());
System.out.print("inherits from: ");
printHierarchy(clz.getSuperclass());
} else {
System.out.println("nothing");
}
}
public static void main (String[] args) {
printHierarchy(ClassA.class);
}
輸出:
ClassA
inherits from: ClassB
inherits from: Object
inherits from: nothing
Java不支持多重繼承。相反,你所描述的是一個階級階層。 Java中沒有明確擴展類的所有類擴展爲Object
。但是,如果類A
延伸B
,那麼它不直接延伸Object
。因爲B
直接延伸Object
,A
仍然是子類Object
(因爲在你可以做Object a = new A()
沒有任何問題),但它不是一個直接的子類。
@Andreas我並不打算至。我會編輯我的答案。謝謝。 –
多繼承有兩個直接的超類。相反,這是一個類層次結構,其中'B'擴展'A',繼而擴展'Object'。 –
Object的唯一特殊例外是:「extends子句不能出現在類Object的定義中,或者發生編譯時錯誤,因爲它是原始類,並且沒有直接的超類。」 (來自[JLS Sec 8.1.4](https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.4)) –