• ベストアンサー

内部クラスを別ファイルに

こんにちは。 お世話になります。 早速、質問なのですが、 内部クラスを別のファイルに記述することは出来ますでしょうか? // MainClass.java public class MainClass{ /* */ private class InnerClass1{ } private class InnerClass2{ } } これのInnerClass1とInnerClass2をそれぞれ InnerClass1.java、InnerClass2.javaファイルのように別のファイルに記述したいと思っています。 出来そうな気はするのですが内部クラスについて 書いてある本やサイトはすべて同じファイルに書いてあったもので・・・ 方法がありましたらよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.3

 こんにちは。  このページ↓にあるように、 http://milkyway.merseine.nu/Java/Java999.html  内部クラスというのは、コンパイラがコンパイル時にチョチョッと小細工しただけの普通のクラスでしかないので、この小細工を自分でやれば、同機能のものは可能だと思います。  する小細工は、 1.内部クラスに外部クラスの参照を保持する。 2.外部クラスのアクセス制限されたメンバ変数やメソッドに、アクセスできるように秘密の抜け道を作る。  しかし、1.はともかく、2.はコンパイラがこっそり付け加えるならともかく、ソースコードに堂々と書いてあると、プログラマが内部クラスとしたクラス以外からは、使わないと硬く心に誓わないと、アクセス制限の意味がなくなっちゃいますよねぇ。  ソースコードも読みにくくなるでしょうし。  もし、1.だけですむのなら、それに越したことはないと思います。

参考URL:
http://milkyway.merseine.nu/Java/Java999.html
sakuhat
質問者

お礼

なるほど。 内部クラスがそんな仕組みだったとは。 でも、おっしゃる通りこれをコードでやろうとすると ソースが読みにくくなりますね。 やはり素直に同じjavaファイルに書くことにします。 ですが、こんな質問をしなければこの先ずっと こんな仕組みを知ることは出来なかったと思います。 とてもよい勉強になりました。 ありがとうございました。

その他の回答 (2)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

No.1さんとは真逆になりますが、もしできるとして、そもそもどう記述します? Javaのクラスは複数ファイルに分けて記述できないはずだし、内部クラスはネストしたクラスだから外側のクラスから取り出せないでしょう。 内部クラスである必要がないクラスなら単純に別クラスにしてしまえば宜しいですけど。

sakuhat
質問者

補足

コンパイル時に別のjavaファイルに記述したクラスを内部クラスとして 一緒にできないかと考えていたんですけど、 やっぱり無理なんでしょうか?

noname#25358
noname#25358
回答No.1

 普通にコピー&ペーストで別ファイル化できませんでしたか?  できなかったのであれば、詳しい症状を教えてください。

sakuhat
質問者

補足

すいません。 言い方が悪かったですね・・・ 別ファイルにする方法というより、コンパイルする方法を聞いたほうがよかったですね。 別ファイルにするだけならもちろん出来るのですが、 InnerClass1はprivte classなのでコンパイルエラーになります。 なのでInnerClass1をMainClassの内部クラスとしてコンパイルするにはどうすればよいのでしょうか?

関連するQ&A