回答
鑑於一個類由類名和加載該類的類加載器唯一標識的事實,parent
和child1
必須由bundle_1
的類加載器加載。 child2
將由bundle_2
的類加載器加載。
在OSGi中,每個bundle都有一個ClassLoader。加載類時,ClassLoader將首先查看該包的Import-Package語句。如果類來自導入的包,則將加載委託給提供該包的包的ClassLoader。如果沒有這些匹配,那麼捆綁將嘗試從它自己的類中加載類。 (這是簡化了一點,但應該足夠你的情況)。
所以父類和child1類將由bundle_1的ClassLoader加載,並且child2將由bundle_2的ClassLoader加載。
還有一件事要記住。 Java中的每個類都存儲在「class」.getClassLoader()中創建此類的ClassLoader。所以這可以讓你輕鬆檢查真正發生的事情。只需實例化child1和child2並打印ClassLoaders。
與此相關的另一件事是,如果您在類A的代碼中使用新的「Classname」(),那麼這將觸發加載類A的ClassLoader(當然可以委派它)。
父類是否會加載兩次? – gstackoverflow 2014-09-24 19:05:08
否。當類加載委派時,bundle1的類加載器將知道它已經加載了父類。 – 2014-09-25 16:43:52
- 1. C# - 加載繼承類
- 2. objc_getClass:加載swift類繼承NSObject
- 3. OSGi Felix和BndTools - 按名稱加載類
- 4. OSGi和JNI的類加載問題
- 5. JMSSerializer和繼承類
- 6. 類繼承和DI
- 7. 自動加載路徑和STI繼承
- 8. OSGi類加載器問題
- 9. 繼承和方法重載
- 10. 繼承,隱藏和重載
- 11. JPA加入繼承類
- 12. 其他繼承類中的繼承類
- 13. JAVA:泛型類繼承和泛型類型繼承
- 14. 繼承UIViewController類和XIB
- 15. ExpressJS和CoffeeScript的類繼承
- 16. Scala案例類和繼承
- 17. 繼承和泛型類型
- 18. Scala隱式類和繼承
- 19. 查詢和繼承的類
- 20. 繼承和類成員
- 21. C#繼承和靜態類
- 22. C#嵌套類和繼承
- 23. 類的繼承和鑄造
- 24. C++繼承和類成員
- 25. python3中的類和繼承
- 26. Ruby gets.chomp和類繼承
- 27. 類繼承和檢索
- 28. ASP.NET MVC類繼承和LINQ
- 29. 虛基類和繼承
- 30. Java內部類和繼承
但child2的超級構造函數將在bundle_1上調用? – gstackoverflow 2014-09-23 17:11:52
您的問題未提供足夠的信息。這些類包含哪些包?捆綁包實際導出和導入了哪些包?另外,調用意味着你正在討論線程。線程不屬於捆綁。 – 2014-09-23 23:10:29
@gstackoverflow:構造函數調用實際上與類加載的關係有限。你需要澄清你的意思「child2的超級構造函數將在bundle_1上調用」還是更好:你首先提出問題的理由。 – 2014-09-24 06:58:55