Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발용

inner class 본문

개발/JAVA

inner class

DeP 2016. 11. 10. 12:47

class안의 class

 


1. nested class (static) : 외부 클래스 만들지 않고 사용 가능, non-static 멤버를 참조할 수 없다

ex)

class OuterClass

{

private string name = "NAME";

static class NestedClass

{

public void fun_name()

{

// name(non-static)을 참조할 수 없음

}

}

 

public static void main()

{

NestedClass nsc = new OuterClass.NestedClass();

nsc.fun_name();

}

 

 

 


2. inner class : 반드시 외부 클래스부터 만들어야함

ex)

class OuterClass

{

class InnerClass

{

public void fun_name()

{

...

}

}

 

public static void main()

{

InnerClass innc = new OuterClass.InnerClass();    : Error!

 

OuterClass outc = new OuterClass();

InnerClass innc = outc.new InnerClass();

}

 

 

 

 

 

3. lacalClass : 메소드안의 class

메소드 안에 클래스를 설계하면 - 밖에서 인식하지 못함 => interface활용

ex)

interface LocalInf
{
    void read();
}

class OuterClass
{
    private String myName;
 
     OuterClass(String name)
     {
         myName=name;
     }
 
     public LocalInf createLocalClassInst()
     {  

 

            //  class LocalClass    
            //  {
            //       public void read()        
            //       {
            //            System.out.println("Outer inst name: "+myName);
            //       }
            //  }

  //  return new LocalClass();  : createLocalClassInst()의
return형 LocalInf -> LocalClass --- Error! 메소드가 끝나면 class가 사라지므로 return형에 LocalClass 접근할 수 없음. -> interface 사용

 


        //  class LocalClass implements LocalInf  //LocalClass이름이 필요가 없음
        //  {
        //       public void read()        : 구현
        //       {
        //            System.out.println("Outer inst name: "+myName);
        //       }
        //  }

       //  return new LocalClass();


  
              return new LocalInf()  //Annonymous class
              {
                   public void read()    //구현
                   {
                        System.out.println("Outer inst name: "+myName);
                   }
              };
          }    //.reateLocalClassInst() end

    }    //.OuterClass end

 

class LocalClassTest

     public static void main(String[] args)
     {
          OuterClass out1=new OuterClass("First");    //Outer Class객체부터 생성해야 함
          LocalInf localInst1=out1.createLocalClassInst();
          localInst1.read();
     }
}

 

 

 

*cf. LocalClass

interface Readable
{
     public void read();
}

 

class OuterClass
{
     private String myName;
 
     OuterClass(String name)
     {
          myName=name;
     }
 
     public Readable createLocalClassInst(final int instID)        //final 반드시 입력해야 그때그때 원하는 값 들어감
     {  
          class LocalClass implements Readable
          {
               public void read()
               {
                    System.out.println("Outer inst name: "+myName);
                    System.out.println("Local inst ID: "+instID);
               }
           }
  
          return new LocalClass();
     }
}

 

class LocalParamClassTest

     public static void main(String[] args)
     {
          OuterClass out=new OuterClass("My Outer Class");
          Readable localInst1=out.createLocalClassInst(111);
          localInst1.read();
  
          Readable localInst2=out.createLocalClassInst(222);
          localInst2.read();
     }
}

 

 

'개발 > JAVA' 카테고리의 다른 글

예외처리 Exception  (0) 2016.11.10
Interface, Abstract, 추상 클래스, 추상 메소드  (0) 2016.11.10
Random  (0) 2016.11.10
static 멤버  (0) 2016.11.10
Array : 기본형과 객체 차이  (0) 2016.11.10