JAVA 내부클래스와 익명클래스
※개념정리
내부클래스 - 클래스 안에 클래스가 선언된 것
내부클래스는 총 4종류로 나뉜다.
1)내부클래스
중첩 클래스 or 인스턴스 클래스
클래스의 필드에 선언되는 클래스이다.
public class Inner{
class E1{
int i = 1;
public void abc( ){
syso(i);
}
}
public static void main(String[]args){
Inner in = new Inner( );
Inner.E1 e1 = in.newE1( );
e1.abc( );
}
}
// 클래스 객체선언
//클래스명.내부클래스명 변수 = 클래스참조변수.new내부클래스명( );
2)내부클래스
정적중첩 클래스 or static 클래스
클래스의 필드에 선언되는 정적클래스이다.
public class Inner{
static class E2{
int i = 2;
public void abc( ){
syso(i);
}
}
public static void main(String[]args){
lnner.E2 e2 = new E2( );
e2.abc( );
}
}
//클래스명.내부클래스 변수 = new 내부클래스명( );
3)내부클래스
지역중첩 클래스 or 지역 클래스
클래스의 메서드에 선언되는 클래스이다.
public class Inner{
public void exec( ){
class E3{
int i = 3;
public void abc( ){
syso(i); }
}
E3 e3 = new E3( );
e3.abc( );
}
public static void main(String[]args){
Inner i = new Inner( );
i.exec( );
}
}
//메서드에서 내부클래스 객체선언
//메인메서드에서 클래스 객체선언
//클래스참조변수.메서드( );
4)내부클래스
익명클래스
추상클래스에서 부모클래스 단계를 생략하고 객체선언을 통해 만들어진 내부 클래스이다.
①추상클래스
public abstract class E4{
public abstract void abc( );
}
②메인클래스와 메인메서드
public class Inner{
public static void main(String[]args){
E4 e4 = new E4( ){
public void abc( ){
int i = 4;
syso(i);
}
};
e4.abc( );
}
}
//추상클래스는 객체선언을 할수 없지만, 익명클래스에서 가능하다.
//int i = 4; 는 메서드 선언 전에 하여도 무방하다.
//추상클래스의 괄호가 끝난 후에 내부클래스참조변수.메서드( )호출한다.