A sentimental robot

Inner class 본문

Java

Inner class

GOD03219 2017. 12. 29. 11:43

 Inner class 란?

 

  • 클래스 안에 클래스를 가지고 있는 구조
  • has a 관계는 항상 객체가 독립적이지만 inner class는 애초에 클래스 안에 클래스를 가진다.
  • outer class의 ( private이든 뭐든 )멤버를 자유롭게 사용할 수 있다.
  • 이벤트 처리할때 많이 쓰인다.
  •  outer class를 생성한 후, inner class를 따로 생성해야 한다.


  •  종류

1) member class( instance class )  -> 가장 많이 쓰임

2) static class 

3) local class   

4) anonymous class  ->  가장 많이 쓰임, 이벤트 처리 시 주로 사용, 추상클래스와 같이 사용됨

 


 

 

member class


 

public class InnerTest {

 private int a;

 public InnerTest(int a) {
  this.a = a;
 }

 class A {     // member inner class

  public void disp(){
   System.out.println(a);
  }
  
 }

 

 public static void main(String[] args) {

 

 //InnerTest it = new InnerTest(100);
 // InnerTest.A it1=it.new A();

InnerTest.A it1=new InnerTest(100).new A();     // 위의 두줄을 한줄로 만들기!

  


  it1.disp();
  
 }

 

}

 

 

 

local class


 



public class InnerTest {

 
 private int a;

 public InnerTest(int a) {
  this.a = a;
 }

 public void out() {      // local inner class > class가 메소드 안에 있음
  class A {

   public void disp() {
    System.out.println(a);
   }

  }


  A aa=new A();      //객체 밖에 객체만들기
  aa.disp();
 }

 

 public static void main(String[] args) {

 

  InnerTest it=new InnerTest(100);
  it.out();
  
  
 }

}


 anonymous class ★


 

abstract class B{
 
 abstract void disp();
 
}
public class InnerTest {

 
 private int a;

 public InnerTest(int a) {
  this.a = a;
 }
 B bb=new B(){     // anonymous inner class
  
  void disp(){
   System.out.println("익명클래스"+a);  // 오버라이딩으로 구체화 시키기
   
  }
  
  
 };     // 추상클래스는 객체 생성못하지만, 익명클래스를 사용하면 생성 가능하다.

 

 public static void main(String[] args) {

 

  InnerTest it=new InnerTest(100);
  it.bb.disp();  
  
  
 }

}



'Java' 카테고리의 다른 글

Thread Synchronization  (0) 2017.12.29
Thread  (0) 2017.12.29
Interface  (0) 2017.12.29
추상클래스를 이용한 스택,큐!  (0) 2017.12.29
Abstract class,추상클래스에 대해서  (0) 2017.12.29