중첩 클래스와 중첩 인터페이스 예제
선언
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 |