중첩 클래스와 중첩 인터페이스 예제 

선언

package sec03.exam01;

public class Car {
	
	class Tire {}
	
	static class Engine{}
}


실행

package sec03.exam01;

public class NestedEx {

	public static void main(String[] args) {
		Car myCar = new Car();
		
		// 인스턴스 멤버 클래스
		Car.Tire tire = myCar.new Tire();
		
		// 정적 멤버 클래스
		Car.Engine engine = new Car.Engine();

	}

}

 

중첩 인터페이스 타입 필드 선언 예제 

선언

package sec03.exam02;

public class CheckBox {
	static interface OnselectListener {
		void onSelect();
	}
	OnselectListener listener;
	public void setListener(OnselectListener listener) {
		this.listener = listener;
	}
	void select() {
		listener.onSelect();
	}
}


구현 객체

package sec03.exam02;

import sec03.exam02.CheckBox.OnselectListener;

public class BackgroundChangeListener implements OnselectListener {

	@Override
	public void onSelect() {
		System.out.println("배경을 변경합니다.");

	}

}


실행

package sec03.exam02;

public class CheckEX {

	public static void main(String[] args) {
		CheckBox checkBox = new CheckBox();
		checkBox.setListener(new BackgroundChangeListener());
		checkBox.select();
	}

}
<결과>
package sec03.exam02;

public class CheckEX {

	public static void main(String[] args) {
		CheckBox checkBox = new CheckBox();
		checkBox.setListener(new BackgroundChangeListener());
		checkBox.select();
	}

}

 

 

 

익명 자식 객체 생성

상속

package sec03.exam03;
// 익명 구현 객체 
public class Parent {
	void parentMethod() {}
}
	
	
class Child extends Parent{}


선언

package sec03.exam03;
// 익명 구현 객체 
public class A {
	Parent field = new Parent() {
		int childField;
		void childMethod() {}
		
		@Override
		void parentMethod() {
			
			
		}
		
	};
	
	void method3() {
		field.parentMethod();
	}
	
	void method2(Parent parent) {}
	
	void method() {
		method2(new Parent() {
		int childField;
		void childMethod() {}
		
		@Override
		void parentMethod() {
			
			
		}
		
	});
		
		Parent localVer = new Child() {
			int childField;
			void childMethod() {}
			
			@Override
			void parentMethod() {
				
				
			}
			
		};
		};
	}

 

익명 자식 객체 생성 2

부모 클래스

package sec03.exam04;

public class Person {
	void wake() {
		System.out.println("7시에 기상");
	}
}


익명 자식 객체 생성

package sec03.exam04;

public class Anonymous {
	//필드
	Person field = new Person() {
		// 익명의 객체 내부에서만 가능
		void work() {
			System.out.println("출근합니다.");
		}
		// 부모메서드 재정의 외부에서도 가능 
		@Override
		void wake() {
			System.out.println("6시에 기상");
			work();// 내부 메서드 호출
		}
		
	};
	
	void method1() {
		//  지역변수 
		Person localVar = new Person() {
			// 익명의 객체 내부에서만 가능
			void work() {
				System.out.println("출근합니다.");
			}
			// 부모메서드 재정의 외부에서도 가능 
			@Override
			void wake() {
				System.out.println("6시에 기상");
				work();// 내부 메서드 호출
			}
			
		};
	}
	
	void method2(Person person) {
		person.wake();
	}
}


익명 자식 객체 실행

package sec03.exam04;

public class AnonyEx {

	public static void main(String[] args) {
		Anonymous anony = new Anonymous();
//		anony.field.wake();
//		anony.method1();
		anony.method2(new Person() {
		// 익명의 객체 내부에서만 가능
		void work() {
			System.out.println("출근합니다.");
		}
		// 부모메서드 재정의 외부에서도 가능 
		@Override
		void wake() {
			System.out.println("6시에 기상");
			work();// 내부 메서드 호출
		}
		
	});
	}

}
<결과>
6시에 기상
출근합니다.

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-06-15 20일차  (0) 2023.06.15
2023-06-14 19일차  (0) 2023.06.14
2023-06-12 17일차  (1) 2023.06.12
2023-06-09 16일차  (0) 2023.06.09
2023-06-08 15일차  (0) 2023.06.08

+ Recent posts