반응형

제목:망우역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

+ Recent posts