[Java] 추상 클래스(abstract class), 추상 메서드(abstract method)
본문 바로가기
Java

[Java] 추상 클래스(abstract class), 추상 메서드(abstract method)

by IYK2h 2022. 12. 24.
728x90

이 글은 https://youtu.be/CXuA31XcBZ0 를 통해 개념 정리 후 복습용으로 정리한 글입니다.

문제시 바로 삭제하겠습니다.


추상 클래스(abstract class)

  • 미완성 설계도. 미완성 메서드를 갖고 있는 클래스
abstract class Player { // 추상 클래스(미완성 클래스)
  abstract void play(int pos); // 추상메서드(몸통{}이 없는 미완성 메서드)
  abstract void stop();        // 추상메서드
}
  • abstract - 추상 클래스라고 표현, 상속해서 구현하라는 의미
  • 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가
Player p = new Player(); // 에러. 추상 클래스는 인스턴스 생성 불가 
  • 상속을 통해 추상 메서드를 완성해야 인스턴스 생성가능
class AudioPlyer extends Player {
  void play(int pos) { ... } // 추상 메서드를 구현
  void stop() { ... }       
}
​
AudioPlyer ap = new AudioPlyer(); //OK

추상 메서드(abstract method)

  • 미완성 메서드. 구현부 {}가 없는 메서드

abstract 리턴타입 메서드 이름();

  • 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우
abstract class Player { // 추상 클래스(미완성 클래스)
  abstract void play(int pos); // 추상메서드(몸통{}이 없는 미완성 메서드)
  abstract void stop();        // 추상메서드
}
​
abstract class AbstractPlayer extends Player {
  void play(int pos) { ... } // 추상 메서드를 구현
}
  • 추상 메서드 호출 가능(호출할 때는 선언부만 필요)
abstract class Player { // 추상 클래스(미완성 클래스)
  boolean pause; // 일시정지 상태
  int currentPos;// 현재 Play되고 있는 위치를 저장하기 위한 변수
  
  Player() {     // 추상클래스도 생성자가 있어야 한다.
    pause = false;
    currentPos = 0;
  }
  
  abstract void play(int pos); // 추상메서드
  abstract void stop();        // 추상메서드
  
  void play() {
    play(currentPos);          // 추상메서드를 사용할 수 있다.
                               // 메서드는 선언부만 알면 호출가능하므로 추상메서드도 호출 가능!!
                               // 상속통해 자손이 완성되면 -> 객체생성 가능 -> 메서드 사용 가능
  }
}

추상클래스의 작성 목적

  • 추상 메서드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메서드를 구현하도록 하기 위함이다.
  • 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존클래스의 공통부분을 뽑아서 추상클래스를 만든다.
  • 추상 메서드가 포함된 추상 클래스를 상속받은 모든 자식 클래스는 추상 메서드를 구현해야만 인스턴스를 생성할 수 있으므로 메소드를 놓치는 일을 예방할 수 있다.
728x90

댓글