プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
お世話になります。

早速、質問なのですが、
内部クラスを別のファイルに記述することは出来ますでしょうか?

// MainClass.java
public class MainClass{
/*

*/
private class InnerClass1{
}
private class InnerClass2{
}
}

これのInnerClass1とInnerClass2をそれぞれ
InnerClass1.java、InnerClass2.javaファイルのように別のファイルに記述したいと思っています。

出来そうな気はするのですが内部クラスについて
書いてある本やサイトはすべて同じファイルに書いてあったもので・・・
方法がありましたらよろしくお願い致します。

A 回答 (3件)

 こんにちは。



 このページ↓にあるように、

http://milkyway.merseine.nu/Java/Java999.html

 内部クラスというのは、コンパイラがコンパイル時にチョチョッと小細工しただけの普通のクラスでしかないので、この小細工を自分でやれば、同機能のものは可能だと思います。

 する小細工は、

1.内部クラスに外部クラスの参照を保持する。

2.外部クラスのアクセス制限されたメンバ変数やメソッドに、アクセスできるように秘密の抜け道を作る。

 しかし、1.はともかく、2.はコンパイラがこっそり付け加えるならともかく、ソースコードに堂々と書いてあると、プログラマが内部クラスとしたクラス以外からは、使わないと硬く心に誓わないと、アクセス制限の意味がなくなっちゃいますよねぇ。
 ソースコードも読みにくくなるでしょうし。

 もし、1.だけですむのなら、それに越したことはないと思います。

参考URL:http://milkyway.merseine.nu/Java/Java999.html
    • good
    • 0
この回答へのお礼

なるほど。
内部クラスがそんな仕組みだったとは。
でも、おっしゃる通りこれをコードでやろうとすると
ソースが読みにくくなりますね。
やはり素直に同じjavaファイルに書くことにします。

ですが、こんな質問をしなければこの先ずっと
こんな仕組みを知ることは出来なかったと思います。
とてもよい勉強になりました。
ありがとうございました。

お礼日時:2005/07/25 12:48

No.1さんとは真逆になりますが、もしできるとして、そもそもどう記述します?


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

この回答への補足

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

補足日時:2005/07/25 11:56
    • good
    • 0

 普通にコピー&ペーストで別ファイル化できませんでしたか?


 できなかったのであれば、詳しい症状を教えてください。

この回答への補足

すいません。
言い方が悪かったですね・・・

別ファイルにする方法というより、コンパイルする方法を聞いたほうがよかったですね。

別ファイルにするだけならもちろん出来るのですが、
InnerClass1はprivte classなのでコンパイルエラーになります。

なのでInnerClass1をMainClassの内部クラスとしてコンパイルするにはどうすればよいのでしょうか?

補足日時:2005/07/25 11:52
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!