Java ネストしたクラスのサンプル

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

目次

ネストしたクラス

Class  クラス名 {
  Class クラス名{
  }
}
  • クラスの中にあるクラスを内部クラスまたはインナークラスといいます。
  • 内部クラスを含むクラスのことをエンクロージングクラスといいます。
  • 内側のクラスにstaticがつくと内部クラスとは挙動が変わります。

ネストしたクラスのサンプル

以降は、ネストしたクラスのサンプルです。
Outside.javaがネストしたクラスで、Test1.javaが呼び出すクラスです。

1.ネストしたクラス (OutSide.java)

3行目は外側のクラスで、6行目は内部クラスです。ネストしています。

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

6行目の内側のクラスは、クラスの前にprotected,privateも付けることができます。
(Test1.javaの3,11,12行目はコメントにします。)

package test1;

public class Outside {
	private String moji = "です";
	
	public class Inside{
		private String iro = "赤";
		
		public String getColor1() {
			return  iro + moji;
		}
	}

	public void getColor2(){
		Inside in1 = new Inside();
		System.out.println(in1.getColor1());
	}
}

2.ネストしたクラスを呼び出すクラス(Test1.java)

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

package test1;

import test1.Outside.Inside;

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

		Outside out1 = new Outside();
		out1.getColor2();//赤です
		
		Inside in1 = out1.new Inside();
		System.out.println(in1.getColor1());//赤です
	}
}

 

内側のクラスがstaticクラスのサンプル

以降は、内側のクラスがstaticクラスのサンプルです。

Outside.javaにstaticクラスがあり、Test1.javaが呼び出すクラスです。

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

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

6行目の内側のクラスは、クラスの前にprotected,privateも付けることができます。
(Test1.javaの3,11,12行目はコメントにします。)

package test1;

public class Outside {
	private String moji = "です";
	
	static class Inside{
		private String iro = "赤";
		
		public String getColor1() {
//			return  iro + moji;
			return  iro;
		}
	}

	public void getColor2(){
		Inside in1 = new Inside();
		System.out.println(in1.getColor1());
	}
}

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

8,9行目は、外側のクラスをインスタンス化してメソッドを実行しています。
11行目は、内部のstaticクラスをインスタンス化して、12行目でメソッドを実行しています。

package test1;

import test1.Outside.Inside;

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

		Outside out1 = new Outside();
		out1.getColor2();//赤
		
		Inside in1 = new Inside();
		System.out.println(in1.getColor1());//赤
	}
}

staticは、インスタンス化しなくてよいクラスメソッドやクラス変数として使われますが、この内部のstaticクラスのときはインスタンス化します。インスタンス化しないとコンパイルエラーになります。

関連の記事

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

△上に戻る