지역 내부 클래스
- 지역 변수와 같이 메서드 내부에서 정의하여 사용하는 클래스
- 메서드의 호출이 끝나면 메서드에 사용된 지역변수의 유효성은 사라짐
- 메서드 호출 이후에도 사용해야 하는 경우가 있을 수 있으므로 지역 내부 클래스에서 사용하는 메서드의 지역 변수나 매개 변수는 final로 선언됨
예제
- AnnonymousInnerTest.java
class Outer2{
int outNum = 100;
static int sNum = 200;
Runnable getRunnuble(int i) {
int num = 10;
class MyRunnable implements Runnable{
int localNum = 1000;
@Override
public void run() {
System.out.println("i = "+i);
System.out.println("num = "+num);
System.out.println("localNum = "+localNum);
System.out.println("outNum = "+outNum+"(외부 클래스 인스턴스 변수)");
System.out.println("Outter.sNum = "+ Outer2.sNum+"(외부 클래스 정적 변수)");
}
}
return new MyRunnable();
}
}
public class AnnonymousInnerTest {
public static void main(String[] args) {
Outer2 out = new Outer2();
Runnable runner = out.getRunnuble(100);
runner.run();
}
}
익명 내부 클래스
- 이름이 없는 클래스(위 지역 내부 클래스의 MyRunnable 클래스 이름은 실제로 호출되는 경우가 없음)
- 클래스의 이름을 생략하고 주로 하나의 인터페이스나 하나의 추상 클래스를 구현하여 반환
- 인터페이스나 추상 클래스 자료형의 변수에 직접 대입하여 클래스를 생성하거나 지역 내부 클래스의 메서드 내부에서 생성하여 반환할 수 있음.
- widget의 이벤트 핸들러에 활용됨
'프로그래밍 언어 > JAVA(자바) 응용' 카테고리의 다른 글
52.함수형 인터페이스와 람다식 구현하여 사용 (0) | 2022.06.01 |
---|---|
51.람다식 (0) | 2022.06.01 |
49.여러 내부클래스의 정의와 유형 (0) | 2022.06.01 |
48.쌍(pair)으로 자료를 관리하는 Map 인터페이스 (0) | 2022.05.31 |
47.정렬을 위한 comparable과 comparator 인터페이스 구현 (0) | 2022.05.31 |
댓글