import org.junit.Test;

public class ClassKindTestCase {
	public interface ParentClass {
		public void add();
	}

	@Test
	public void innerClassTest(){
		innerLocalClass("ddakker", 21);
		innerAnonymousClass("ddakker", 22);
	}
	
	// 로컬 클래스
	public void innerLocalClass(final String name, final int age){
		class ChildClass implements ParentClass {
			@Override
			public void add(){
				System.out.println("[innerLocalClass] name=" + name + ", add age=" + age);
			}
		}
		
		ParentClass instance = new ChildClass();
		executeMethos(instance);
	}
	
	// 익명 내부클래스
	public void innerAnonymousClass(final String name, final int age){
		/*ParentClass instance = new ParentClass(){
			@Override
			public void add() {
				System.out.println("[innerAnonymousClass] name=" + name + ", add age=" + age);
			}
		};
		executeMethos(instance);*/
		executeMethos(
			new ParentClass(){
				@Override
				public void add() {
					System.out.println("[innerAnonymousClass] name=" + name + ", add age=" + age);
				}
			}
		);
	}

	// 실행(공통 분리)
	public void executeMethos(ParentClass object){
		object.add();
	}
	
}

+ Recent posts