자바칩
[자바의 신] 16장. 클래스 안에 클래스 본문
*Nested 클래스의 종류
Nested Class - 클래스 내에 선언하는 클래스
ㄴ Static Nested Class - 선언문에 static 포함
ㄴ Inner Class (= 내부 클래스) - 선언문에 static 미포함
ㄴ Local Inner Class (= (지역) 내부 클래스) - 클래스 이름 O
ㄴ Anonymous Inner Class (= 익명 (내부) 클래스) - 클래스 이름 X
*Static Nested 클래스의 객체 생성 방법
감싸고있는클래스이름.StaticNested클래스이름 객체이름 = new 감싸고있는클래스이름.StaticNested클래스이름();
*내부 클래스의 객체 생성 방법
감싸고있는클래스이름 객체이름1 = new 감싸고있는클래스이름();
감싸고있는클래스이름.내부클래스이름 객체이름2 = 객체이름1.new 내부클래스이름();
*익명 클래스의 객체 생성 방법
1. 매개변수 내에서 생성
어떠한객체이름.메소드(new 인터페이스이름() {
// 인터페이스 메소드 구현
});
2. 생성한 객체를 재사용하기 위해 변수에 저장해두고 사용
인터페이스이름 객체이름 = new 인터페이스이름() {
// 인터페이스 메소드 구현
};
직접해 봅시다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package c.inner.practice;
public class MyPage {
InputBox input;
public static void main(String[] args) {
MyPage myPage = new MyPage();
InputBox input = new InputBox();
myPage.setUI(input);
myPage.pressKey();
}
public void setUI(InputBox input) {
this.input = input;
KeyEventListener listener = new KeyEventListener() {
public void onKeyDown() {
System.out.println("Key Down");
}
public void onKeyUp() {
System.out.println("Key Up");
}
};
input.setKeyListener(listener);
}
public void pressKey() {
input.listenerCalled(2);
input.listenerCalled(4);
}
}
|
cs |
정리해 봅시다
1. Neested 클래스에 속하는 3가지 클래스에는 어떤 것들이 있나요?
Static Nested 클래스
내부 클래스(Local Inner Class)
익명 클래스(Anonymous Inner Class)
2. Nested 클래스를 컴파일하면 Nested 클래스 파일의 이름은 어떻게 되나요?
감싸고있는클래스이름$Nested클래스이름.class
3. Static Nested 클래스는 다른 Nested 클래스와 어떤 차이가 있나요?
감싸고 있는 클래스에 선언된 변수 중에 static으로 선언된 변수만 참조 가능하다.
하지만, 다른 Nested 클래스(내부 클래스, 익명 클래스)는 모든 변수를 참조 가능하다.
즉, public, protected, package-private, private, static으로 선언된 변수를 모두 참조 가능하다.
4. Static Neseted 클래스의 객체 생성은 어떻게 하나요?
감싸고있는클래스이름.StaticNested클래스이름 객체이름 = new 감싸고있는클래스이름.StaticNested클래스이름();
5. 일반적인 내부 클래스의 객체 생성은 어떻게 하나요?
감싸고있는클래스이름 객체이름1 = new 감싸고있는클래스이름();
감싸고있는클래스이름.내부클래스이름 객체이름2 = 객체이름1.new 내부클래스이름();
6. Nested 클래스를 만드는 이유는 무엇인가요?
Static Nested 클래스를 만드는 이유 | 내부 클래스를 만드는 이유 |
한 곳에서만 사용되는 클래스를 논리적으로 묶어서 처리할 필요가 있을 때 사용한다. | 캡슐화가 필요할 때(예를 들어 A라는 클래스에 private으로 선언된 변수가 있다. 이 변수에 접근하고 싶은 B라는 클래스를 선언하고, B 클래스를 외부에 노출시키고 싶지 않을 경우) 사용한다. 즉, 내부 구현을 감추고 싶을 때 사용한다. |
7. Nested 클래스에서 감싸고 있는 클래스의 private으로 선언된 변수에 접근할 수 있나요?
Static Nested 클래스는 접근 불가능하고, 내부 클래스와 익명 클래스는 접근 가능하다.
8. 감싸고 있는 클래스에서 Nested 클래스에 선언된 private으로 선언된 변수에 접근할 수 있나요?
접근 가능하다.
'Study > Java' 카테고리의 다른 글
[자바의 신] 21장. 제네릭: 문제 풀이 (0) | 2024.05.15 |
---|---|
[자바의 신] 20장. 자바랭 패키지: 문제 풀이 (0) | 2024.05.13 |
[자바의 신] 중간 점검 및 실습: 요약 문제, 실습 문제 (0) | 2024.05.11 |
[자바의 신] 17장. 어노테이션: 문제 풀이 (0) | 2024.05.10 |
[자바의 신] 15장. String: 문제 풀이 (0) | 2024.05.08 |