|
|
제목:망우역10-4
내부클래스란?
클래스 내에 선언되 클래스
선언하는 이유 두클래스가 긴밀한 관계에 있기때문에 사용
장점
1.내부클래스에서 외부클래스의 멤버들을 쉽게 접근
2.코드의 복잡성을 줄임
class A{}
class B{}
↓
class A{
class B{}
}
단 b클래스는 다른클래스에서 잘 사용 되지 않는 것이여야함
내부 클래스의 종류와 특징
인스턴스 클래스-외부 클래스의 멤버변수 선언위치에 선언
외부 클래스의 인스턴스멤버처럼 다루어진다. 주로 외부 클래스의 인스턴스 멤버들과 관련되 작업에 사용됨
스태틱 클래스-외부 클래스의 멤버 변수 선언위치에 선언
외부 클래스의 static멤버처럼 다루어짐 주로 외부 클래스 static멤버 특히 static메서드에서 사용될 목적으로 선언
지역 클래스-외부클래스의 메서드나 초기화 블럭 안에 서언하며 선언된 영억 내부에서만 사용
익명 클래스-클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스 (일회용)
내부클래스의 선언
변수가 선언된 위치에 따라 인스턴스변수,스태딕변수,지역변수로 나누듯 내부클래스도 이와 같이 위치에 따라 나뉜다.
class A{
int x=0;
static y=0;
void z(){
int x=0;
}
}
↓
class A(){
class X{}
static class Y{}
void Z(){
class z{}
}
}
내부클래스의 제어자와 접근성
멤버변수와 같은위치에 선언되며 도한 멤버변수와 같은 성질을 가진다.
따라서 내부클래스가 외부 클래싀 멤버와 같이 간주되고 인스턴스멤버와 static멤버 간의 규칙이 내부 클래스에도 똑같이 적용된다.
ex)
protected stactic int x=0; → protected static class X()
private면 private
static멤버는 인스턴스멤버를 직접 호출할 수 없는 것처럼
인스턴스 클래스는 외부클래스의 인스턴스 멤버를 객체생성 없이 바로 사용할 수 있지만
스태틱 클래스는 외부클래스의 인스턴스 멤버를 객체 생성없이 사용할 수 없다.
class A{
private int x=0;
static y=0;
class B{
int bx=x; //외부 클래스의 private멤버도 접근가능 내부 클래스는 외부에 속하기 때문에 가능
int by=y;
}
static class C{
int cx=x; //스태틱 클래스는 외부 클래스의 인스턴스 멤버에 접근 할 수 없다.
static int cy=y;
}
void D(){
final int z=0;
class dd{
int dz=z;//외부클래스의 지역변수는 final이 붙은 변수(상수)만 접근가능
}
}
}
컴파일시 생성되는 클래스 파일
InnerEx4.class
Outer.class
Outer$InstanceInner.class
Outer$StaticInner.class
Outer$1LocalInner.class
생성되는 파일명은 '외부 클래스명$내부클래스명.class'
익명 클래스
이름이없는 클래스
클래스의 선언과 객체의 생성을 도시에 하기 대문에 단 한번만 사용될수 있고 오직 하나의 객체만을 생성 하는 일회용 클래스
new 조상클래스 이름(){
//멤버 선언
}
or
new 구현 인터페이스이름(){
//멤버 선언
}
'외부 클래스명$숫자.class'
'코딩 > Java' 카테고리의 다른 글
| 쓰레드(Thread)-1 (0) | 2016.04.04 |
|---|---|
| 컬렉션 프레임웍(Collection Framework),동기화(Synchroization) (0) | 2016.04.01 |
| java.long 패키지 (0) | 2016.03.30 |
| 예외처리(excption handling) (0) | 2016.03.29 |
| 인터페이스(interface) (0) | 2016.03.24 |