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) 익명 객체
아 이거 어캐 하는지 헷갈려..
'Java' 카테고리의 다른 글
220119 혼자공부하는자바 Ch10~Ch14 (0) | 2022.01.19 |
---|---|
220118 혼자공부하는자바 Ch8 인터페이스 (0) | 2022.01.18 |
220117 혼자공부하는자바 Ch7 상속, Chp8 인터페이스 (0) | 2022.01.18 |
220115 혼자공부하는자바 Ch7 상속 (0) | 2022.01.15 |
220112 혼자공부하는자바 Ch6-5~ 모르는 부분 리마인드 (0) | 2022.01.12 |