이 포스트는 작성자의 다른 블로그에서 벨로그로 이전하며 가져오는 포스트 입니다.
public class OuterClass {
private static int x = 10;
class Inner{
int getX() {
return x;
}
}
내부클래스란 말 그대로 클래스 내부에 존재하는 클래스이다.
위 코드를 보자면 OuterClass 내부에 멤버스태틱변수 int x 와 내부클래스 Inner이 있다
Inner클래스 안에는 x의 값을 리턴해주는 메소드가 있다
그렇다면,
OuterClass
int x
class Inner
가 있고
Inner
메소드 getX()
가 있다
이제 메인 메소드로 넘어가보자
public static void main(String[] args) {
OuterClass c = new OuterClass();
OuterClass.Inner i = c.new Inner();
System.out.println(i.getX());
}
}
public class InnerExam3 {
public void exec(){
class Cal{ //메소드안에서 클래스 선언
int value = 0;
public void plus(){
value++;
}
}//내부클래스 end
Cal cal = new Cal();//3)메소드안에서 지역중첩클래스를 생성
cal.plus();//4) 지역중첩클래스안의 멤버 메소드 호출
System.out.println(cal.value);
}//exec() end
public static void main(String[] args) {
//지역중첩클래스로 접근하려면
InnerExam3 i = new InnerExam3(); //1)외부클래스 생성
i.exec(); //2) 외부클래스의 멤버메소드를 호출
}//main end
}//InnerExam3 end
이번엔 메소드의 내부 클래스를 알아보자
이건 메소드 내에서 끝을 내야한다 즉 exec메소드를 호출하면 new Cal()을 통한 객체생성, 내부클래스의 메소드plus()실행 및 출력까지
위에 순서도 써놨듯이
메인 메소드에서 외부클래스 InnerExam3 객체 생성후 exec()메소드를 호출하면
exec()메소드에 적혀있는대로 cal객체생성,메소드실행,출력을 하는것 조금 헷갈리지만 프로그램은 항상 순서대로 흘러간다는것만 기억하면 이해 하기 쉽다