2012-09-19 78 views
2

Java中的其他每個類都繼承自Object類。構建一個單獨的Java類層次結構

是否有可能在我的FastObject類中添加基於Java的第二個完全獨立的類層次結構?

我這樣做的最初目標是創建更小,更快的對象,並且爲特定算法專門設計的功能更少。但讓我清楚,我對這是不是一個「好主意」不感興趣。我只想知道這是否可能;我一直無法找到辦法。它需要更改JVM嗎?新的引導類路徑功能?是真的解決方案忽略Object並看看替換java.lang.Class?使用直接的Java編譯器而不是虛擬機會讓我的工作更輕鬆嗎?

要清楚,我不只是想編輯根類Object類。這將需要重新編寫整個Java庫。我不想替換當前的層次結構,我只是想創建一個單獨的,我可以在相同的代碼中使用。

回答

2

不,這是不可能的。

所有創建的類都可以顯式或隱式地擴展另一個類。如果您創建一個類並明確定義它所繼承的類,那麼它將擴展該類。如果不是,那麼它隱含地延伸Object。沒有辦法解決這個問題,就像無法重載操作員或任何類似的東西一樣。這是Java編程語言的基本設計決策。

所有類別延伸Object。唯一不是原始類型的東西。當然,這個例外是Object,它本身沒有擴展。

+0

鑑於「所有創建的類擴展了另一個類,無論是顯式的還是隱式的」,「Object」擴展了什麼?或者是規則的例外情況?不希望成爲迂腐,只是好奇 – chrisbunney

+0

@chrisbunney除了對象的顯着例外。 – hsanders

+0

哈哈,touche。除了一個以外。 :)雖然我打算將「創建的類」作爲「用戶創建的,定製的非核心Java類」來實現。 – asteri

1

您可能可以通過使用引導類路徑來注入自己的對象實現。但是,我不認爲有任何方法可以使用Object以外的基礎對象。您可以嘗試一些字節碼操作,但完全有可能您的修改後的類將被類加載器拒絕。

+1

這相當於「替換當前層次結構」,OP表示他不想這樣做。他希望能夠同時使用兩者。不過這確實很有趣。我可以在業餘時間嘗試一下,看看它是如何發展的。 :) – asteri

+0

@Jeff - 是的,我意識到我所建議的不完全是OP想要的。我在答覆中說了很多。 – jtahlborn