본문 바로가기
Java

[Java] 내부클래스, 익명클래스

by happyhelen 2021. 7. 27.

내부클래스(inner class)

클래스 안의 클래스

내부클래스는 외부클래스로 바로 접근 가능, 단 static 내부클래스는 외부클래스에 접근 불가

코드가 복잡해보일 수 있기때문에 잘 쓰지는 않음

 

public class No8_InnerClass {
	int num = 100;
	static String str1 = "hello";
	
	public No8_InnerClass() {
		System.out.println("OuterClass Constructor");
	}
	
	// 내부클래스1
	class InnerClass {
		int num = 200;
		String str2 = str1; // 내부클래스는 외부클래스 멤버 접근가능
		
		// 내부클래스1 생성자
		public InnerClass() {
			System.out.println("InnerClass Constructor");
		}
	}
	
	// 내부클래스2(static)
	static class SInnerClass {
		int num = 300;
		String str3 = str1;
		// String str4 = str2; static 클래스는 외부클래스 멤버에 접근불가
		
		// 내부클래스2 생성자
		public SInnerClass() {
			System.out.println("Static InnerClass Contructor");
			
		}
	}
}

 

익명클래스(anonymous class)

이름이 없는 클래스

목적 : 메소드 재정의, 인터페이스나 추상클래스에서 주로 이용

이름이 없기때문에 오버라이드 하자마자 호출하고 바로 버려지게 된다

public class No8_AnonymousClass {
	public No8_AnonymousClass() {
		System.out.println("AnonymousClass Constructor");
	}
	
	public void anonyMethod() {
		System.out.println("----- anonyMethod start----");
	}

}

 

 

내부클래스 & 익명클래스의 실행클래스

public class No8_InnerClassAnonymousClass_Ex {

	public static void main(String[] args) {
		No8_InnerClass obj1 = new No8_InnerClass();
		
		System.out.println("obj1.num :"+ obj1.num);
		System.out.println("obj1.str1 :"+ obj1.str1);
		
		System.out.println();
		
		// 내부클래스1
		No8_InnerClass.InnerClass inner = obj1.new InnerClass();
		System.out.println("inner.num : "+ inner.num);
		System.out.println("inner.str2 : "+ inner.str2);
		
		System.out.println();
		
		// 내부클래스2(static)
		// No8_InnerClassAnonymousClass.SInnerClass Sinner = obj1.new SInnerClass(); static이라서 안됨
		No8_InnerClass.SInnerClass SInner = new No8_InnerClass.SInnerClass();
		System.out.println("SInner.num : "+ SInner.num);
		System.out.println("SInner.str3 : "+ SInner.str3);
		
		System.out.println();
		
		// 익명(anonymous)클래스
		new No8_AnonymousClass() {
			// override
			public void anonyMethod() {
				System.out.println("--- Override anonyMethod---");
			}
		}.anonyMethod(); //이름이 없기때문에 바로호출, 한번 쓰고 버림
	}

}

'Java' 카테고리의 다른 글

[Java] 비트연산  (0) 2021.07.29
[Java] 인터페이스  (0) 2021.07.27
[Java] 상속 메소드 오버라이드, 자료형, super 클래스  (0) 2021.07.24
[Java] static과 private, Getter&Setter  (0) 2021.07.24
[Java] 객체, 클래스, 오버로딩  (0) 2021.07.24