Java ネストしたクラスのサンプル(内部クラス)

Javaのネストしたクラス(内部クラス)のサンプルです。

目次

ネストしたクラス

Class  クラス名 {
  Class 内部クラス名{
  }
}
  • クラスの中にあるクラスを内部クラス(インナークラス)といいます。
  • 内部クラスを含むクラスのことをエンクロージングクラスといいます。

以下は、ネストしたクラスとネストしたクラスを呼び出すクラスのサンプルコードです。

1.ネストしたクラス

3行目は、外側のクラスです。
6行目は、内部クラス(インナークラス)です。
10行目の変数mojiは4行目の外側のクラスのメンバ変数を参照しています。内部クラスは、外側のクラスの変数やメソッドへアクセスできます。
14行目は、外側のクラスのメソッドです。15行目で内部クラスをインスタンス化し、16行目でメソッドを実行しています。

package test1;

public class Color1 {
	private String moji = "です";
	
	public class Color2{
		private String iro = "黄";
		
		public String getColor() {
			return  iro + moji;
		}
	}

	public void getColor2(){
		Color2 c2 = new Color2();
		System.out.println(c2.getColor());
	}
}

2.ネストしたクラスを呼び出す

3行目のtest1はパッケージ名、Color1は外側のクラス、Color2は内部クラスです。
8行目で、外側のColor1クラスのインスタンスを生成しています。
9行目は、外側のクラスのメソッドで内部クラスをインスタンス化しメソッドを実行しています。
11行目は、c1.new Color2()という形式で内部クラスのインスタンスを生成しています。

package test1;

import test1.Color1.Color2;

public class Test1 {
	public static void main(String[] args) {

		Color1 c1 = new Color1();
		c1.getColor2();//黄です
		
		Color2 c2 = c1.new Color2();
		System.out.println(c2.getColor());//黄です
	}
}

内部クラスがstaticの場合

以下は、内部クラスがstaticのネストしたクラスとネストしたクラスを呼び出すクラスのサンプルコードです。

1.内部クラスがstaticのネストしたクラス

6行目は、classの前にstaticがついています。
10行目は、4行目の外側のクラスの変数mojiへアクセスできません。static付きのクラスは、外側のクラスの変数やメソッドへのアクセスが不可になります。

package test1;

public class Color1 {
	private String moji = "です";
	
	public static class Color2{
		private String iro = "黄";
		
		public String getColor() {
//			return  iro + moji;
			return  iro;
		}
	}

	public void getColor2(){
		Color2 c2 = new Color2();
		System.out.println(c2.getColor());
	}
}

2.ネストしたクラスを呼び出す

11行目は、staticの内部クラスのインスタンスを生成し12行目でメソッドを実行しています。

package test1;

import test1.Color1.Color2;

public class Test1 {
	public static void main(String[] args) {

		Color1 c1 = new Color1();
		c1.getColor2();//黄
		
		Color2 c2 = new Color2();
		System.out.println(c2.getColor());//黄
	}
}

関連の記事

Java クラスのサンプル
Java コンストラクタのサンプル
Java クラスの継承のサンプル
Java 匿名クラスのサンプル

△上に戻る