FIF's 코딩팩토리

자바 기초 NCS교육과정(47)-inner 본문

Back-End/국비 NCS교과과정

자바 기초 NCS교육과정(47)-inner

FIF 2019. 8. 6. 14:49
반응형

 class 클래스명{
    멤버변수;
    static{ }
    생성자
    메소드;
    내부클래스;
  }
   
  내부클래스
  1 클래스 안에 정의된 클래스이다.


  2 특정 클래스 내에서만 주로 사용되는 클래스이다.


  3 외부클래스의 private으로 선언된 멤버변수를 직접적으로 접근해서 처리할 수 있다.
   
  내부클래스 종류
  1 인스턴스 클래스 :외부클래스의 멤버변수 선언위치에 선언하며, 외부클래스의
     인스턴스 멤버처럼 다루어진다. 주로 외부 클래스의 인스턴스 멤버들과
     관련된 작업에 사용될 목적으로 선언된다.


  2 스태틱 클래스 : 외부클래스의 멤버변수 선언위치에 선언하며, 외부클래스의
    static멤버처럼 다루어진다.
    주로 외부클래스의 static멤버, 특히 static메서드에서 사용될
    목적으로 선언된다.


  3 지역클래스 : 외부 클래스의 메서드나 초기화블럭 안에 선언하며,
    선언된 영역 내부에서만 사용될 수 있다.


  4 익명클래스 : 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스이다.

 

 

 

 

Java202_inner.java

class OuterInstance {
	private int num;
	private int data;

	public void display() {
		System.out.println("display");
	}
	
	class InnerInstance{
		public void run() {
			num=10;
			System.out.println(num);
		}
	}
}

public class Java202_inner {

	public static void main(String[] args) {
		OuterInstance outer=new OuterInstance();
		outer.display();
		OuterInstance.InnerInstance inner=outer.new InnerInstance();
		inner.run();
	}

}

 

Java203_inner.java

class OuterStatic{
		private int x;
		static private int y;
		
		static void call() {
			y=9;
			System.out.println(y);
		}
		
		static class InnerStatic{
			int z;
			static int k=5;
			void prn() {
				//x=40;//비static외부자원은 inner static내부클래스에서 참조불가
				y=20;
				z=30;
				System.out.printf("%d %d\n",y,z);
			}
		}
}

public class Java203_inner {

	public static void main(String[] args) {
		OuterStatic.call();
		
		OuterStatic.InnerStatic inner=new OuterStatic.InnerStatic();
		inner.prn();
		
		System.out.println(OuterStatic.InnerStatic.k);
		
	}

}

출력결과

 

Java204_inner.java

class OuterLocal{
	private int x;
	private int y;
	final private int z=10;
	
	public void call(int a) {
		final int b=20;
		int c=30;
		//final이 선언이 된것만 이너에서 사용가능
		//a=300;
		//System.out.println(a);
		//c=50;
		class InnerLocal{
			void prn() {
				x=5;
				y=150;
				System.out.println("x="+x);
				System.out.println("y="+y);
				System.out.println("z="+z);
				System.out.println("a="+a);
				System.out.println("b="+b);
				System.out.println("c="+c);
			}
		}
		InnerLocal inner=new InnerLocal();
		inner.prn();
	}
}

public class Java204_inner {

	public static void main(String[] args) {
		OuterLocal outer=new OuterLocal();
		outer.call(100);
	}

}

출력결과

 

Java205_inner.java

abstract class InnerAnonymous {
	abstract void prn();
}

class Test extends InnerAnonymous {
	@Override
	void prn() {
		System.out.println(10);
	}
}

class OuterAnonymous {
	private int x;

	public void call() {
		/*InnerAnonymous tt = new InnerAnonymous() {
			@Override
			void prn() {
				x = 5;
				System.out.println(x);
			}
		};
		tt.prn();*/
		
		new InnerAnonymous() {
			@Override
			void prn() {
				x = 5;
				System.out.println(x);
			}
		}.prn();
	}
}

public class Java205_inner {

	public static void main(String[] args) {
		Test tt = new Test();
		tt.prn();
		
		OuterAnonymous outer=new OuterAnonymous();
		outer.call();

	}

}

출력결과

 

 

반응형
Comments