>> Java入門トップに戻る

内部クラス

Javaの内部クラスについて説明します。

内部クラスとはクラスの中にクラスを定義することです。
イメージとしては以下の様な感じです。
class Test1{
	
	class Test2{
		
	}
}
そのままクラスの中にクラスを定義するだけです。
上記のように定義した場合「内部クラスTest2のメソッドから、クラスTest1のメソッドやフィールドにアクセスすることが可能」になります。
この時、アクセス修飾子は関係なくアクセス出来ます。
何故かというと、「内部クラスTest2はクラスTest1の一部」なので、クラスTest1に定義されたメソッドやフィールドは自分のクラスの物のように扱えるのです。

では実際にコードを見てみましょう。
package test4;

public class SampleTest {

	public static void main(String[] args) {
		
		Test1 obj = new Test1();
		

	}
}
class Test1{
	private int value=5;

	private void echoHello(){
		System.out.println("Hello");
	}
	Test1(){
		Test2 obj = new Test2();
		obj.echoValue();
	}
	class Test2{
		
		public void echoValue(){
			//Test1のフィールドも触れる。
			System.out.println(value);
			
			//Test1のメソッドも触れる
			echoHello();
		}
	}
}
クラスTest1内に内部クラスTest2を定義しています。
内部クラスTest2のechoValueメソッドでは、Test1のフィールド「value」にアクセスしたり、Test1のechoHelloメソッドにアクセスしています。
そのメソッドとフィールドのアクセス修飾子は両方共「private」です。
内部クラスだとprivateでもアクセス出来てしまうのです。

このコードを実行すると、
クラスTest1のコンストラクタで内部クラスTest2のインスタンスを生成し、内部クラスTest2のechoValueメソッドを呼び出されるので、コンソールに「5」と「Hello」という文字列が出力されます。

以上が内部クラスの説明です。
使い所としては、別のクラスに自分のクラスのフィールドやメソッドを共有させたい時などに使うと良いと思います。

>> 【無名クラス(匿名クラス)】に進む
>> Java入門トップに戻る