✓ 중첩 클래스
- 클래스 내부에 선언한 클래스.
- 바이트코드 파일명: 멤버 클래스 - 바깥클래스$멤버클래스.class, 로컬 클래스 - 바깥클래스$1로컬클래스.class
1. 멤버 클래스
- 클래스의 멤버로서 선언.
- 클래스나 객체가 사용 중이라면 언제든지 재사용이 가능하다
1) 인스턴스 멤버 클래스: static 키워드 없이 중첩 선언된 클래스. 인스턴스 필드, 메소드만 선언 가능하고 정적 필드와 메소드는 선언 할 수 없다. 바깥 클래스 객체를 생성해야만 사용할 수 있다.
class A {
class B { // 인스턴스 멤버 클래스
B() {} // 생성자
int fiels1; // 인스턴스 필드
void method1() {} // 인스턴스 메소드
}
}
// 사용시
A a = new A();
A.B b = a.new B();
2) 정적 멤버 클래스: 바깥 클래스로 바로 접근할 수 있다.
class A {
static class C { // 정적 멤버 클래스
C() {} // 생성자
int field1; // 인스턴스 필드
static int field2; // 정적 필드
void method1() {} // 인스턴스 메소드
static void method2() {} // 정적 메소드
}
}
// 사용시
A.C c = new A.C();
2. 로컬 클래스
- 생성자 또는 메소드 내부에서 선언. (접근 제한자, static 붙일 수 없음)
- 메소드를 실행할 때만 사용되고 메소드가 종료되면 없어진다.
- 인스턴스 필드와 메소드만 선언 가능하고 정적 필드와 메소드는 선언할 수 없다.
- 매개 변수와 로컬 변수가 final 특성을 갖게 됨
void method() {
class D { // 로컬 클래스
D() { } //생성자
int field1; // 인스턴스 필드
void method1() {} // 인스턴스 메소드
}
// 사용시
D d = new D();
d.field1 = 3;
d.method1();
}
✓ 중첩 인터페이스
- 클래스 내부에 선언된 인터페이스.
- 인스턴스 멤버 인터페이스와 정적 멤버 인터페이스 모두 사용가능.
- 주로 UI 프로그래밍에서 이벤트를 처리할 목적으로 정적 멤버 인터페이스를 많이 사용한다.
✓ 익명객체
- 이름이 없는 객체
- 반드시 어떤 클래스를 상속하거나 인터페이스를 구현해야만 한다
부모클래스 [필드|변수] = new 부모클래스(매개값, ...) {
// 필드와 메소드
}; // 하나의 실행문이기 때문에 세미콜론을 반드시 붙여야 함
- 익명 자식 객체에 새롭게 정의된 필드와 메소드는 익명 자식 객체 내부에서만 사용되고 외부에서는 접근이 불가하다.
(익명 자식 객체는 부모 타입 변수에 대입되므로 부모 타입에 선언된 것만 사용할 수 있기 때문이다)
- 익명 구현 객체 생성 (매개 변수와 로컬 변수가 final 특성을 갖게 된다)
인터페이스 [필드|변수] = new 인터페이스() {
// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언
// 필드와 메소드
}
'컴퓨터 & 코딩 > Java' 카테고리의 다른 글
[혼공학습단 10기][혼공자] 3주차 미션 (0) | 2023.07.12 |
---|---|
[혼공학습단 10기][혼공자] 예외 처리 (0) | 2023.07.12 |
[혼공학습단 10기][혼공자] 인터페이스 (0) | 2023.07.07 |
[혼공학습단 10기][혼공자] 2주차 미션 (0) | 2023.07.06 |
[혼공학습단 10기][혼공자] 인스턴스 멤버와 정적 멤버 (0) | 2023.07.05 |