- ベストアンサー
内部クラスを別ファイルに
こんにちは。 お世話になります。 早速、質問なのですが、 内部クラスを別のファイルに記述することは出来ますでしょうか? // MainClass.java public class MainClass{ /* */ private class InnerClass1{ } private class InnerClass2{ } } これのInnerClass1とInnerClass2をそれぞれ InnerClass1.java、InnerClass2.javaファイルのように別のファイルに記述したいと思っています。 出来そうな気はするのですが内部クラスについて 書いてある本やサイトはすべて同じファイルに書いてあったもので・・・ 方法がありましたらよろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 このページ↓にあるように、 http://milkyway.merseine.nu/Java/Java999.html 内部クラスというのは、コンパイラがコンパイル時にチョチョッと小細工しただけの普通のクラスでしかないので、この小細工を自分でやれば、同機能のものは可能だと思います。 する小細工は、 1.内部クラスに外部クラスの参照を保持する。 2.外部クラスのアクセス制限されたメンバ変数やメソッドに、アクセスできるように秘密の抜け道を作る。 しかし、1.はともかく、2.はコンパイラがこっそり付け加えるならともかく、ソースコードに堂々と書いてあると、プログラマが内部クラスとしたクラス以外からは、使わないと硬く心に誓わないと、アクセス制限の意味がなくなっちゃいますよねぇ。 ソースコードも読みにくくなるでしょうし。 もし、1.だけですむのなら、それに越したことはないと思います。
その他の回答 (2)
- rinkun
- ベストアンサー率44% (706/1571)
No.1さんとは真逆になりますが、もしできるとして、そもそもどう記述します? Javaのクラスは複数ファイルに分けて記述できないはずだし、内部クラスはネストしたクラスだから外側のクラスから取り出せないでしょう。 内部クラスである必要がないクラスなら単純に別クラスにしてしまえば宜しいですけど。
補足
コンパイル時に別のjavaファイルに記述したクラスを内部クラスとして 一緒にできないかと考えていたんですけど、 やっぱり無理なんでしょうか?
普通にコピー&ペーストで別ファイル化できませんでしたか? できなかったのであれば、詳しい症状を教えてください。
補足
すいません。 言い方が悪かったですね・・・ 別ファイルにする方法というより、コンパイルする方法を聞いたほうがよかったですね。 別ファイルにするだけならもちろん出来るのですが、 InnerClass1はprivte classなのでコンパイルエラーになります。 なのでInnerClass1をMainClassの内部クラスとしてコンパイルするにはどうすればよいのでしょうか?
お礼
なるほど。 内部クラスがそんな仕組みだったとは。 でも、おっしゃる通りこれをコードでやろうとすると ソースが読みにくくなりますね。 やはり素直に同じjavaファイルに書くことにします。 ですが、こんな質問をしなければこの先ずっと こんな仕組みを知ることは出来なかったと思います。 とてもよい勉強になりました。 ありがとうございました。