[개인공부] 7-31~ 추상클래스(abstract class), 추상메서드(abstract method)

Walter Mitty·2022년 11월 23일
0

개인공부

목록 보기
17/40
post-thumbnail

추상클래스(abstract class)

  • 미완성 설계도로, 미완성 메서드를 갖고 있는 클래스이다.
abstract class Player { //미완성 메서드를 가지고있으므로 추상클래스(미완성클래스)
	abstract void play(int pos);	//추상메서드(몸통{}이 없는 미완성 메서드)
    abstract void stop();			//추상메서드
}

  • 다른 클래스 작성에 도움을 주기 위한 것(추상클래스사용이유)
    • 인스턴스 생성 불가하다.
Player p = new Player(); // ERROR. 추상 클래스의 인스턴스 생성 불가

  • 상속을 통해 추상 메서드를 완성해야 인스턴스 생성가능
    • { 몸통 } 을 만들어줘서 완성해줘야한다! = 구현
class AudioPlayer extends Player {
	void play(int pos) { /* 내용 생략 */ }	//추상메서드를 구현 해주면 사용가능!
    void stop() { /* 내용 생략 */ }			//추상메서드를 구현 해주면 사용가능!
}

AudioPlayer ap = new AudioPlayer();  //OK -> 위에서 구현해줘서 완성된 설계도가 됨 => 인스턴스 생성 가능! 
Player p = new AudioPlayer(); // 참고로 조상타입도 가능!)
따라서 p.play() 혹은 p.stop을 하면 AudioPlayer 객체의 play()stop()이 호출된다.

추상메서드(abstract method)

  • 미완성 메서드로 구현부({몸통})이 없는 메서드이다.
    • 메서드 = 선언부 + 구현부 형식인데, 이때 선언부는 있는데 구현부가 없는 셈!
      abastract 리턴타입 메서드이름(); //{}가 없다!
  • 추상메서드 사용이유: 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우


  • 추상 메서드 호출 가능(호출할 떄는 선언부만 필요)

추상클래스의 작성

  • 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존틀래스의 공통 부분을 뽑아서 추상클래스를 만든다.



  • group으로 묶어서 for문을 통해 Marine, Tank, Dropship을 모든 Unit을 한번에 이동시킬 수 있다. => 다형성의 장점2(배열에 여러객체를 담아서 한번에 이동가능)
  • 만약 최상위 클래스인 Object 클래스라면? → ERROR !!!!
    • Object 클래스에 move()메서드가 정의되어 있지 않기 떄문에 error가 난다.
      • Object 라는 리모콘에는 move라는 버튼이 없다.
Object[] group = new Object[3];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new Dropship();

for(int i=0; i< group.length; i++) {
	group[i].move(100, 200);  //ERROR!!!!
}

추상클래스의 작성

  • 추상화의 반대말은 구체화
    • 추상화된 코드는 구체화된 코드보다 유연하다. =. 변경에 유리하다
    GregorianCalendar cal = new GregorianCalendar(); //구체적
    Calendat cal = Calendar.getInstance(); //추상적 //Calendar의 자손 객체를 반환 = 뭘 반환할지 불분명함

0개의 댓글