C++ vs Java 内部クラス

そろそろ内部クラスに関して一言言っておくか - 神様なんて信じない僕らのために


実行してみると

'Hoge::func()' はアクセスできない(関数 Hoge::Bar::func() )

なんてエラーが。うーん、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使う時はクラス名を短縮してたんだ。うん、いい勉強になったヽ(´ー`)ノ