innerClass_Ex4

Posted 2015. 4. 10. 15:52

package chap10;

class Outer{
 int iv = 10;
 int iv2 = 30;
 class InstanceInner{ // 인스턴스 내부클래스
  int iv = 100;
  void method1(){ // 인스턴스 내부클래스의 멤버 메서드
   System.out.println("iv =" + iv);
   System.out.println("this.iv=" + this.iv); // 100
   // 외부클래스 멤버 접근 방법
   System.out.println("Outer.iv=" + Outer.this.iv); // 10
   System.out.println("iv2=" + iv2); // 30
  }
 }
 
 static class StaticInner{
  int iv = 200;
  static int cv = 300;
 }
 
 void myMethod(){
  class LocalInner{
   int iv = 400;
  }
  LocalInner linner = new LocalInner(); // 반드시 객체 생성을 해야 사용 할 수 있다.
  System.out.println(linner.iv);
 }
}

public class InnerEx4 {
 public static void main(String[] args) {
  Outer oc = new Outer();
  
  // 내부클래스의 타입 : 외부클래스. 내부클래스
  Outer.InstanceInner ii = oc.new InstanceInner();
  System.out.println("ii.iv = " + ii.iv);  // 100
  
  // Static 내부클래스 클래스멤버 접근방법
  System.out.println("Outer.StaticInner.cv :" + Outer.StaticInner.cv); // 300
  
  // Static 내부클래스 인스턴스 멤버 => 객체화 필요
  Outer.StaticInner os = new Outer.StaticInner();
  System.out.println("os.iv = " + os.iv);
  oc.myMethod();
  
  // 인스턴스내부클래스의 메서드 호출
  Outer.InstanceInner ot = oc.new InstanceInner();
  ot.method1(); // 100
  
 }
}

'Java !!!' 카테고리의 다른 글

StringBuffer_Ex2  (0) 2015.04.10
StringBuffer  (0) 2015.04.10
innerClass_Ex3  (0) 2015.04.10
innerClass_Ex2  (0) 2015.04.10
enum  (0) 2015.04.10