回答
它怎麼可能是多重繼承?
class Object { /* stuff */ }
class Foo /* implicit extends Object */ {}
class FooBar extends Foo /* and therefore extends Object */ {}
The rules are described in the Java Language Specification:
類對象所有其他類的超類(§8.1.4)。
編譯器是如何知道的?任何機構都告訴我編譯器是如何工作的? – user2848012
@ user2848012編譯器如何知道什麼?規則在Java語言規範中指定。爲了使編譯器與Java兼容,它需要遵循這些規則。 –
當你有像
class A {}
然後A
隱含延伸Object
。事實上字節碼類似
class A extends Object {}
現在,如果我們有
class B extends A {}
然後B
延伸A
,但也的Object
一個子類,因爲A
是Object
子類。這是沒有,不過,多重繼承:
Object | A | B
多重繼承應該是這樣的:
Object A \ / \ / \/ B
即B
從兩個層次無關的類繼承。
類對象是類層次結構的根。每個類都有Object作爲超類。所有對象,包括數組,都實現了這個類的方法。 Java documentation
您的困惑似乎在術語「多重繼承」中。多重繼承指對象可以是多於一個其他類型的DIRECT後代。
這將是多重繼承的一個例子,在Java中不支持:
class Z extends A, B, C{
}
多重繼承意味着一個類從多個類不在同一行的繼承繼承。多重繼承的問題是,如果方法和實例變量具有相同的名稱,但具有不同的操作或值,則不清楚要使用哪一個繼承的方法或變量。
例如:
class Foo {
void baz() { }
}
class Bar {
void baz() { System.out.println("test"); }
}
class FooBar extends Foo extends Bar {}
是多重繼承的一個例子。如果FooBar類的一個對象叫做baz(),我們不會知道使用哪個baz()。
但是,如果類FooBar只擴展Foo類,而不是類Bar(和類Foo擴展類Object),那麼它不是多繼承。如果Object中的方法(如toString())要寫入Foo,則此方法將覆蓋Object的toString(),即類FooBar會知道子類Foo的toString()應該被調用,而不是父類, Object的toString()。
當你看一個類,例如A
,查找繼承樹將始終返回到Object
。如果A
和Object
之間有多個類別,則這不是多重繼承。由此可得出像這樣:當一個類是繼承樹至少有兩個「分支」的子發生
Object
|
SomeIntermediateClass
|
A
多重繼承。例如:
Object
| |
A B
\/
C
在上述情況下,C
從多個父母繼承,並因此參與多繼承。
- 1. 每個類都繼承Object類
- 2. 每個SASS擴展類
- 3. 在Objective C中,每個用戶類都默認擴展NSObject嗎?
- 4. 擴展一個類,每個類都有很多實現,每個實現都有Scala中的主要方法
- 5. Java中的每個類擴展Object.Then如何擴展其他類。因爲一個類只能擴展一個類
- 6. 因爲所有類都從Object類擴展,因此Java中的多繼承?
- 7. Java中的每個子類都從兩個類(Object及其超類)繼承?
- 8. 每個數據類型是否都繼承自Object?
- 9. 所有Android類都擴展Activity嗎?
- 10. 擴展另一個類的類如何擴展Object類,儘管不允許多重繼承?
- 11. 類都擴展一個抽象類,實現了接口
- 12. 爪哇 - 擴展擴展一個Thread類
- 13. 擴展一個擴展類的模塊
- 14. 擴展兩個類
- 15. 擴展單個類
- 16. 每次我打包擴展程序時,都會生成Chrome擴展程序ID
- 17. 每個類如何繼承Object類?
- 18. 擴展擴展類型
- 19. 擴展擴展類Zend_Db_Table_Row_Abstract
- 20. 如何在java中爲默認的「Object」類創建對象?正如你所知,默認情況下每個類都擴展了對象類
- 21. C#泛型:列表<Object>或新類擴展名單<Object>
- 22. Java不支持多重繼承,但隱含在Java中的每個類擴展了Object並允許多一個
- 23. Python列表擴展,用新行附加每個擴展值
- 24. 將github-highlight-selected-chrome擴展擴展到每個網頁
- 25. 從另一個擴展參數化泛型類擴展類
- 26. 是否有可能擴展一個庫類擴展MY_Controller類
- 27. {... object,property:value}如何使用擴展語法?
- 28. 如何擴展多個類
- 29. 動態擴展一個類
- 30. 替代擴展多個類
是的......但多重繼承是**不是**這個 – ppeterka
不是每個類_directly_擴展了'Object'。給定'A類擴展對象'和'B類擴展A','A'直接擴展'Object','B'直接擴展'A','B'通過'A'間接擴展'Object'。如果'B'通過兩條不同的路徑擴展了'Object',那麼只有鑽石問題。一個類有多個超類並不一定意味着你有多重繼承。 –