2012-05-04 64 views
2

每個java類的根類都是Object類。我可以改變我的班級和地點嗎?class MyObject extends Object。它有更多的功能。我可以在java中更改由編譯器設置的默認超類嗎?

這個事情是可能的?

+0

我可以問你爲什麼要這樣做嗎?這是不可能的,如果你想這樣做,你可能想要做一些能夠以更好(正確)的方式實施的事情。 – shem

回答

5

不,這是不可能的。這甚至不是編譯器問題。 java.lang.Object作爲繼承層次的根是語言定義甚至虛擬機規範的一個非常基本的事實。

+0

,但進一步後,我的類將擴展對象...實際上我想,當我們不擴展默認情況下,編譯器將擴​​展java.lang.Object權利,但我希望將其更改爲myPack.MyDefaultObject ..讓我或不? –

+0

@Ankur Patel:正如我所說,這是不可能的。 –

+0

好吧,好罰款..多謝 –

3

不,這是不可能的。 Java中的所有對象都必須來自java.lang.Object

如果您想爲系統中的每個對象添加功能,那麼我只會引入您自己的MyObject類,並確保所有類都來自此。如果你想擴展功能到現有的對象,那麼我會使用靜態幫助器方法來做到這一點(在C#中使用擴展方法,但在Java中不存在這樣的選項)。

+0

你會真的做MyObject的一切延伸?你不會...... – heikkim

+0

我不會,但問那個問題的人可能會! –

3

我從來沒有聽說過這樣的事情。你爲什麼想要?這會讓你的代碼無法跟隨任何人,除了你。每個Java程序員都假設你要麼明確地擴展一個類,要麼擴展Object。

在課程開始時放入「擴展MyObject」真的有那麼多工作嗎?我很確定Eclipse(和其他IDE)可以配置爲自動爲您插入。

+0

這些天,我很確定你可以用AOP來做,如果你真的想。 – mcfinnigan

1

旁邊,這似乎是一個值得商榷的做法,我 -
可以使用bytecode instrumentation歸檔此 (但這不是在編譯時間,但在vminit /類加載的時間內完成 - 這取決於所使用的儀器的類型)。

相關問題