내부클래스 (Inner Class)
1. 내부 클래스 (Inner Class)
- 클래스 in 클래스 (클래스 안에 선언한 클래스
1
2
3
4
5
6
class Outer {
...
class Inner {
...
}
}
2. 내부 클래스 특징
- 내부 클래스에서 외부 클래스 멤버에 접근가능
- 외부에서는 내부 클래스에 접근 가능
3. 내부 클래스 종류
- 인스턴스 클래스 (instance class)
- 정적 클래스 (static class)
- 지역 클래스 (local class)
- 익명 클래스 (anonymous class)
4. 익명 클래스 (Anonymous Class)
- 이름을 가지지 않는 클래스
- 선언과 동시에 객체 생성
- 일회용 클래스
1
2
3
클래스이름 참조변수이름 = new 클래스 이름() {
...
}
(실습1 : 외부클래스)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Java 프로그래밍 - 클래스와 객체_1
// 추상 클래스 Person
class Outer {
public void print() {
System.out.println("Outer.Print");
}
class Inner {
public void innerPrint() {
Outer.this.print();
}
}
}
public class Main {
public static void main(String[] args) {
// 외부 클래스
Outer o1 = new Outer();
Outer.Inner i1 = new Outer().new Inner();
}
}
(실습2: 내부 클래스 - 인스턴스)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Java 프로그래밍 - 클래스와 객체_1
// 추상 클래스 Person
class Outer {
class Inner {
public void innerPrint() {
Outer.this.print();
}
}
}
public class Main {
public static void main(String[] args) {
// 내부 클래스 - 인스턴스
Outer.Inner i1 = new Outer().new Inner();
}
}
(실습3: 내부 클래스 - 정적 )
- static이면 바로 메모리에 올라오는 방식이므로,
- Outer.this.print() 사용을 하려해도, Outer는 일반 인스턴스 클래스이기에 서로 타입이 다르다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Java 프로그래밍 - 클래스와 객체_1
// 추상 클래스 Person
class Outer {
static class InnerStaticClass {
void innerPrint() {
// Outer.this.print();
}
}
}
public class Main {
public static void main(String[] args) {
// 내부 클래스 - 정적
Outer.InnerStaticClass iis1 = new Outer.InnerStaticClass();
}
}
(실습4: 익명 클래스)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
abstract class Person {
public abstract void printInfo();
}
class Student extends Person {
@Override
public void printInfo() {
System.out.println("Student.printInfo");
}
}
public class Main {
public static void main(String[] args) {
// 익명 클래스
Person p1 = new Person() {
@Override
public void printInfo() {
System.out.println("Main.printInfo");
}
};
}
}
This post is licensed under CC BY 4.0 by the author.