そろそろ内部クラスに関して一言言っておくか - 神様なんて信じない僕らのために
実行してみると
なんてエラーが。うーん、Borland C++5.5は駄目な子なのかな?
C++初心者として思うに、Hogeでprivateなものは、Barのコンストラクタとして渡してもやっぱprivateのままで、アクセス不可のような気がするけどなぁ……
public class HogeMain { public static void main( String[] args ) { Hoge hoge = new Hoge(); hoge.getBar().func(); //ここでエラー } } class Hoge { private Bar bar = new Bar(); private class Bar { public void func() { Hoge.this.func(); } } private void func() { System.out.print("func"); } public Bar getBar() { return bar; } }
ちなみにJavaで似たようなクラスを作ってみたんだけど、よく考えたら内部クラスがprivateなら、hoge.Bar().func();ってところで「クラスBarってなんなのよ」ってJavaに怒られるよなぁ……むぅ。
そういえばJavaの内部クラスのメソッド内で、同じ名前の外部クラスのメソッドを使った事なかったんだよね。
だから最初、内部クラスで「Hoge.Bar.func();」とか書いてJavaに怒られた。確かにこれじゃstaticメソッドだよなぁorz
Eclipseで「Hoge.」の候補の中にthisがあったんで、「Hoge.this.func();」と適当に打ってみたら正解みたいだった。なるほどねぇ、同じクラス内でthis使う時はクラス名を短縮してたんだ。うん、いい勉強になったヽ(´ー`)ノ