2012-05-04 8 views
2

すべてのJavaクラスには、ルートクラスがオブジェクトクラスです。私は自分のクラスのクラスと場所を変更することができますclass MyObject extends Object。それはいくつかの機能的にある。Javaでコンパイラによって設定されたデフォルトのスーパークラスを変更できますか?

この物は可能ですか?

+0

なぜあなたはそれをしたいのですか?それは可能ではありません。あなたがそれをやりたいのであれば、より良い(そして正しい)方法で実装できるものをやりたいと思うかもしれません。 – shem

答えて

5

いいえ、不可能です。それはコンパイラの問題でもありません。 java.lang.Objectは、継承階層のルートとして、言語定義とVM仕様の非常に基本的な事実です。

+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を拡張することを前提としています。

クラスの冒頭に「extends MyObject」を挿入するのは本当に大変ですか? Eclipse(および他のIDE)を自動的に挿入するように設定できることは間違いありません。

+0

最近、私はあなたが本当にしたいと思ったら、あなたはAOPでそれをやることができると確信しています。 – mcfinnigan

1

の横に、これは私には疑問のアプローチだということ -
あなたはこの をアーカイブするbytecode instrumentationを使用することができます(ただし、これはコンパイル時にはなくvminit /クラスロード時に行われていません - 使用計器の種類によって異なります)。

関連する問題