JAVA

Java 내부(inner)클래스

서묘_ 2022. 1. 6. 16:48

<내부클래스(Inner Class)>

 

class 클래스명{
    변수
    생성자
    메서드
    class 클래스명2{} //클래스 안에 선언되는 내부클래스
} //외부클래스

 

내부클래스는 보통 현재 클래스 안에서만 사용할 목적으로 만드는 클래스이며

일종의 은닉화라고 볼 수 있다.

 

 

종류

(객체 생성 시점), 객체 생성 방법

 

인스턴스 내부클래스

(외부클래스 생성 후 생성)

static변수, static메서드 선언 불가

외부클래스 변수 사용 가능

MemberInner outer = new MemberInner();
MemberInner.Inner inner = outer.new Inner();
- 한 줄로 합치면
MemberInner.Inner inner = new MemberInner().new Inner();

 

정적(static) 내부 클래스

(외부클래스 상관 없이 내부클래스 생성)

static변수, static메서드 사용

instance멤버 사용 불가

StaticInner.Inner inner = new StaticInner.Inner();

 

지역 내부클래스

(내부클래스가 포함된 메서드에서 내부클래스 생성)

외부클래스 변수 사용 가능

메서드 안에있는 지역 변수 사용 불가 (사용시 상수(final)가 됨)

Inner i = new Inner();
i.printData();
//메서드 안에서 객체 생성 후 메서드 호출

 

Anonymous Inner class : 이름 없는 내부 클래스

(선언 시 객체 생성)

new super(){
    멤버;
}
new super_interface(){
    //interface로부터 물려받은 추상 메서드 오버라이딩
}

이름이 없기 때문에 일회성으로 하나의 멤버만 선언할 수 있다. 생성자는 불가.