10/11 18-3 InnerStaticClass(내부 정적 클래스)
InnerStaticClass(내부 "정적" 클래스)
아주 특이한 요놈 알아볼 것
얘만 정적멤버 가지는거 OK
하지만 외부클래스 인스턴스 NO
외부클래스명$내부클래스명.class 요렇게 되어있어서 외부 내부 구분가능
원래 클래스앞에 static 안되는데 이놈은 특이하게 가능!!! 이름이 나름 내부 "정적" 클래스라구!
[외부 클래스] =>이거봐 원래 클래스에는 static 못 붙음!
class OuterStatic {
[멤버변수]
int outerInstanceVar;
static int sameVar;
static int outerStaticVar;
InnerClass inner = new InnerClass(); => 내부클래스 인스턴스화 하쟝
[멤버 메소드] => 내부에서 변수들 가져오려면 미리 내부클래스 생성 해야한다잉 당근당근
void outerInstanceMethod() {
정적멤버는 인스턴스화 할 필요가 없죠
System.out.println(InnerClass.innerStaticVar); 가능
System.out.println(InnerClass.innerinstancVar); 이렇게 접근하는거 아니지 멍충아
System.out.println(inner.innerInstanceVar); 이거지 !! 인스턴스로 멍튱
}
static void outerStaticMethod(){
System.out.println(InnerClass.innerStaticVar);
System.out.println(inner.innerInstanceVar); 정적메소드에는 정적요소만 가능!!
}
[내부"정적"클래스]
static class InnerClass{
[내부멤버변수들]
int innerInstatnceVar;
int sameVar =1;
static int innerStaticVar; ==> 요거!!!!! 특이한거 얘만할 수 있는거 !!! 정적은 정적만!
static final int INNER_MAX_INT = Integer.MAX_VALUE;
생성자도 생성가능
public InnerClass ( ){
System.out.println("내부 클래스의 생성자");
}
[내부멤버 메소드]
void innerInstanceMethod(){ =>인스턴스메소드 이거도 좀 헷깔릴말 함… 정적클래스안에 인스턴스메소드가 가능한가 …?? 원래 정적클래스란 개념이 없엇어서 가능한감 ….
outerInstanceMethod(); 아무리 외부꺼라도 인스턴스는 안됨
outerStaticMethod(); 정적 메소드는 가능하지
OuterStatic.sameVar = sameVar; 정적 변수도 가능하고
}
static void innerStaticMethod(){ =>정적메소드
outerInstanceMethod(); 인스턴스 노노
outerStaticMethoid() 역시 정적이라 가능
}
}///////InnerClass
}//////// OuterStatic
메인
※외부 클래스가 아닌 별개의 다른 클래스에서 내부 정적 클래스에 접근할 때에는
외부 클래스를 먼저 인스턴스화 할 필요없이 내부 정적 클래스의 인스턴스화가 가능하다.
외부 클래스명.내부클래스명 인스턴스변수 = new 외부 클래스명.내부클래스명()
OuterStatic.InnerClass inner = new OuterStatic.InnerClass();
요렇게!
빌더 패턴일때는 아래 처럼 객체 생성 => 빌더패턴은 바로 다음으로 정리할거얌!!
System.out.println(inner.innerInstanceVar);
System.out.println(innerclass22.OuterStatic.InnerClass.innerStaticVar);