본문 바로가기
Java

220118 혼자공부하는자바 Ch9 중첩 클래스와 중첩 인터페이스

by 행인데어 2022. 1. 18.

09-1) 중첩 클래스와 중첩 인터페이스 소개

중첩 클래스:

클래스의 멤버로서 선언되는 중첩 클래스를 멤버클래스 - 클래스 or 객체가 사용 중이면 언제든지 재사용 가능

생성자 or 메소드 내부에서 선언되는 중첩 클래스를 로컬클래스 - 메소드 실행할 때만 사용, 메소드 종료 후 없어짐

 

멤버클래스에는 인스턴스 멤버 클래스와 정적 멤버 클래스가 있다.

인스턴스 멤버 클래스는 static키워드 없이 중첩 선언된 클래스. 인스턴스 필드, 메소드만 선언할 수 있음 정적필드, 메소드는 X - 바깥클래스의 객체를 생성해야만 인스턴스 멤버 클래스의 객체를 생성할 수 있음

정적 멤버 클래스는 static키워드로 선언된 클래스. 모든 종류의 필드와 메소드 선언 가능함.

바깥클래스 외부에서 정적멤버클래스 객체를 생성하기 위해서는 그냥 바로 생성하면 됨.

 

public class Car {
	class Tire {}
	static class Engine {}
}
public class NestedClassExample {
	public static void main(String[] args) {
		Car myCar = new Car();
		//인스턴스 멤버 클래스 - Car(바깥클래스) 객체를 생성해야만, Tire클래스 객체 생성할 수 있다.
		Car.Tire tire = myCar.new Tire();
		//정적 멤버 클래스 - Car(바깥클래스)로 바로 접근할 수 있다.
		Car.Engine engine = new Car.Engine();
	}
}

 

중첩 인터페이스:

 

public class CheckBox {
	OnSelectListener listener;
	
	void setOnSelectListener(OnSelectListener listener) {
		this.listener = listener;
	}
	
	void select() {
		listener.onSelect();    //구현 객체의 메소드 호출
	}
	
	static interface OnSelectListener {    //중첩 인터페이스 생성
		void onSelect();    //추상메소드
	}
}
public class CheckBoxExample {
	public static void main(String[] args) {
		CheckBox checkBox = new CheckBox();
		checkBox.setOnSelectListener(new BackgroundChangeListener());
		checkBox.select();
	}
}
public class BackgroundChangeListener implements CheckBox.OnSelectListener {
	@Override
	public void onSelect() {
		System.out.println("배경을 변경합니다.");
	}

}

출력결과:

배경을 변경합니다.

 

09-2) 익명 객체

아 이거 어캐 하는지 헷갈려..