inClass
class InClass{
int iNum = 100;
int sInNum = 500; //내부 클래스의 static 변수는 사용할 수 없다. 외부 클래스의 생성과 무관하지 않기 때문
void inTest(){
System.out.println("OutClass num = " +num + "(외부 클래스의 인스턴스 변수)");
System.out.println("OutClass sNum = " + sNum + "(외부 클래스의 스태틱 변수)");
System.out.println("InClass inNum = " + iNum + "(내부 클래스의 인스턴스 변수)");
}
}
public void usingClass(){
inClass.inTest();//inner 클래스의 메서드가 사용된다
}
.
.
outClass.usingClass();
사용하는 메서드를 out 클래스에 정의해서 사용한다
OutClass.InClass inner = outClass.new InClass(); //내부 클래스를 생성하려면(private이 아닌 경우)
inner.inTest();
static class InStaticClass{
int iNum = 100;
static int sInNum = 200;
void inTest(){
System.out.println("InClass num = " +iNum + "(내부 클래스의 인스턴스 변수)");
System.out.println("OutClass sNum = " + sNum + "(외부 클래스의 스태틱 변수)");
System.out.println("InClass sNum = " + sInNum + "(내부 클래스의 스태틱 변수)");
}
static void sTest(){ //메서드가 static인 경우
// System.out.println("InClass num = " +iNum + "(내부 클래스의 인스턴스 변수)"); // 내부 클래스의 생성과 무관하게 사용할 수 있어야 하기 때문에 사용 불가
System.out.println("OutClass sNum = " + sNum + "(외부 클래스의 스태틱 변수)");
System.out.println("InClass sNum = " + sInNum + "(내부 클래스의 스태틱 변수)");
}
}
OutClass.InStaticClass sInClass = new OutClass.InStaticClass(); //내부 클래스를 생성해서 사용하거나
sInClass.inTest();
System.out.println();
OutClass.InStaticClass.sTest(); //out 클래스.내부클래스.메서드로 사용한다