JAVA

내부클래스

Stater 2019. 10. 13. 09:00

클래스 내부에 구현한 클래스( 중첩된 클래스 )

클래스 내부에서 사용하기 위해 선언하고 구현하는 클래스

주로 외부 클래스 생성자에서 내부 클래스를 생성 

 

내부클래스 유형

Code

package innerclass;

class OutClass{
	//인스턴스 내부 클래스
	//멤버변수를 선언하는 부분
	
	private int num=10;
	private static int sNum=20;
	private InClass inClass;
	
	//인너 클래스 생성시기
	//아웃클래스의 콘스트럭트에서 많이 생성
	public OutClass() {
		inClass = new InClass();
	}

	class InClass{
		int iNum = 100;
		//사용불가
//		static int sInNum = 200;
		
		void inTest() {
			System.out.println(num);
			System.out.println(sNum);
		}
	}
	
	public void usingInner() {
		inClass.inTest();
	}
	//static으로 선언하고 나서 사용이가능하다. 인스턴스 생성시점에 대한 개념을 이해하고 보면 쉽다.
	static class InStaicClass{
		int inNum = 100;
		static int sInNum= 200;
		
		void inTest() {
			System.out.println(inNum);
			System.out.println(sInNum);
			System.out.println(sNum);
		}
		
		static void sTest() {
			//사용불가
//			System.out.println(inNum);
			System.out.println(sInNum);
			System.out.println(sNum);
		}
	}
}



public class InnerTest {

	public static void main(String[] args) {
		OutClass outClass = new OutClass();
		outClass.usingInner();
		
		//outclass 인위적으로 만든 것->private 경우 접근 불가 
		OutClass.InClass myInClass = outClass.new InClass();
		myInClass.inTest();
		
		System.out.println();
		
		OutClass.InStaicClass sInClass = new OutClass.InStaicClass();
		sInClass.inTest();
		OutClass.InStaicClass.sTest();
	}

}

 

지역내부클래스

package innerclass;

class Outer{
	int outNum = 100;
	static int sNum=200;
	
	//지역변수의 유효범위- 메소드가 호출되서 종료될때까지만의 유효
	//상수화
	Runnable getRunnable(int i) {
		
		int num = 100;
		//지역내부 클래스 
		class MyRunnable implements Runnable {

			@Override
			public void run() {
				System.out.println(num);
				System.out.println(i);
				System.out.println(outNum);
				System.out.println(Outer.sNum);
			}
			
		}
		return new MyRunnable();
	}
}

public class LocalInnerClassTest {

	public static void main(String[] args) {

		Outer outer = new Outer();
		Runnable runnable = outer.getRunnable(50);
		
		runnable.run();
	}

}

 

AnonymousInnerClassTest 

package innerclass;

class Outer2{
	int outNum = 100;
	static int sNum=200;
	
	//지역변수의 유효범위- 메소드가 호출되서 종료될때까지만의 유효
	//상수화
	Runnable getRunnable(int i) {
		
		int num = 100;
		//지역내부 클래스 
		return new Runnable() {

			@Override
			public void run() {
				System.out.println(num);
				System.out.println(i);
				System.out.println(outNum);
				System.out.println(Outer.sNum);
			}
			
	};
}
	Runnable runner = new Runnable() {
		
		@Override
		public void run() {
			System.out.println("test");
			
		}
	};
}
//익명이너클래스 -위젯핸들링 텍스트박스 할때 사용-> 상수화된 값들이 넘어와서 사용된다
public class AnonymousInnerClassTest {

	public static void main(String[] args) {

		Outer2 outer = new Outer2();
		Runnable runnable = outer.getRunnable(50);
		outer.runner.run();
		runnable.run();
	}

}
반응형

'JAVA' 카테고리의 다른 글

스트림(Stream)  (0) 2019.10.15
람다식  (0) 2019.10.14
Map인터페이스  (2) 2019.10.12
Comparable 인터페이스와 Comparator 인터페이스  (0) 2019.10.11
set 인터페이스  (0) 2019.10.10