A sentimental robot

Abstract class,추상클래스에 대해서 본문

Java

Abstract class,추상클래스에 대해서

GOD03219 2017. 12. 29. 10:59

final을..

 

  1. 상수(field)에 붙히면 고정 -> 상수화
  2. 객체(class)에 붙히면 상속관계 불가
  3. 메소드에 붙히면 Overriding 불가


추상클래스

 

 

  •  추상메소드를 한 개 이상 가지고 있는 클래스를 추상클래스라고 한다.
  •  구체화가 안되어있기 때문에 객체를 만들지 못한다.
  •  오직 상속을 목적으로 쓰인다. 즉, 항상 부모 클래스가 된다.
  •  추상클래스를 상속받은 클래스도 똑같이 객체를 만들지 못한다. ( 추상클래스를 상속 받음으로서 추상적인 부분이 생기기 때 문 )  -> Solution : 상속받은 구체화가 안된 부분을 오버라이딩을 통해 구체화 시킨다.
  •  추상클래스를 상속받은 자식클래스들은 강제성을 부여받아 추상메소드들을 오버라이딩 해야한다. 그렇지 않을 경우 자식들도 추상클래스화 된다.( 추상메소드는 강제성을 지닌다. 상속받은 클래스가 무조건 추상메소드를 만들어야 한다. )

 

  • 익명클래스로 사용하기 위해 사용 :  익명클래스로 사용할 경우에는 예외적으로 객체를 만들수 있다.(이벤트 처리시 주로 사용)

  • 동적바인딩(dynamic binding) 을 주로 사용하기 위해 쓰인다.

cf) 잠깐! 동적바인딩이란?

 

   1) 상속관계일 때만 사용가능

   2) 부모의 레퍼런스로 자식을 접근하는 방식

   3) 코드를 간결하게 만들 수 있다.

   4) 동적 바인딩 시 부모의 레퍼런스로 접근할 수 있는 대상은 부모가 알고 있는 것들만 가능하다.

       자식을 접근 할 순 있지만 자식에게 추가된 것은 접근할 수 없다. ( 제한적 )


 

 

 



public abstract class EE {            // 추상클래스 : 추상메소드를 한 개 이상 가짐

 abstract void draw();                 // 추상 메소드 특징 : 바디가 없다.
}



 


public class AA extends EE {

@Override

  void draw(){  


 System.out.println("AA");


 }


void disp(){                // 자식이 추가적으로 만든 메소드는 부모가 모른다.
  System.out.println("disp");
 }
 
 
}


 


 


public class BB extends EE {
 
 @Override
 void draw() {

  System.out.println("BB");
 }

}

 



 


public class CC extends EE {

 @Override
 void draw(){
  
  System.out.println("CC");
 }

}

 


 


public class DD  {
 
 
 
 public static void main(String[]args){
  
  /* AA aa=new AA();    // 정적바인딩
  aa.draw();
  
  BB bb=new BB();
  bb.draw();
  
  CC cc=new CC();
  cc.draw(); */
  
  EE ee=new AA();   // EE ee=new EE(); x 추상클래스는 객체생성불가 , 동적바인딩 : 부모의 레퍼렌스로 자식의 메소드 접근  
  ee.draw();
  
  ee=new BB();
  ee.draw();
  
  ee=new CC();
  ee.draw();


   //AA aa=new AA();
   //ee=aa;
   //ee.disp();  // 출력안됨 -> 동적 바인딩 시 부모의 레퍼런스로 접근할 수 있는 대상은 부모가 알고 있는 것들만 가능하다. 출력하기 위해선 ee( 추상클래스 )에 추상메소드 abstract void disp();추가해야한다.


 }

 

}

'Java' 카테고리의 다른 글

Interface  (0) 2017.12.29
추상클래스를 이용한 스택,큐!  (0) 2017.12.29
Overridding, 재정의  (0) 2017.12.29
Inheritance exercise(2)  (0) 2017.12.29
Inheritance exercise(1)  (0) 2017.12.29