추상 클래스, 추상 메서드

essential·2023년 8월 21일

객체 지향

목록 보기
32/40

추상 클래스(abstract class)

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

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

  • 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능
class AudioPlayer extends Player {
	void Play(int pos) {/* 내용 생략 */} //추상 메서드를 구현(몸통{} 만들어줌)
	void stop() {/* 내용 생략 */} //추상 메서드를 구현
}
AudioPlayer ap = new AudioPlayer(); // ok 인스턴스 생성 ok

추상 메서드(abstract method)

  • 미완성 메서드. 구현부 (몸통 {})가 없는 메서드
  • 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우
abstract class Plyer {
	abstract void play(int pos); // 추상 메서드 (몸통{} 이 없는 미완성 메서드)
	abstract void stop(); // 추상 메서드
}

class AudioPlayer extends Player {
	void Play(int pos) {/* 내용 생략 */} //추상 메서드를 구현(몸통{} 만들어줌)
	void stop() {/* 내용 생략 */} //추상 메서드를 구현
}

abstract class AbstactPlayer extends Player { // 1개만 구현해서(2개를 상속 받았는데) abstract 붙여줌
	void Play(int pos) {/* 내용 생략 */} //추상 메서드를 구현(몸통{} 만들어줌)

}

  • 추상 메서드 호출 가능 (호출할 때는 선언부만 필요)
abstract class Player {
	boolean pause;
	int currentPos;	

	Player() { // 추상 클래스도 생성자가 있어야 한다.
				pause = false;
				currentPos = 0;
	}
}

abstract void play (int pos); // 추상 메서드

abstract void stop (); // 추상 메서드

	void play() {
			play(currentPos); // 추상 메서드를 호출 할 수 있다
	}

ex. PlayerTest

abstract class Player { // 추상 클래스
	abstract void play(int pos); // 추상 메서드
	abstract void stop(); //추사 메서드
}

class AudioPlayer extends Player {
	void play(int pos) {(System.out.println(pos+"위치부터 play 합니다.");}
	void stop() {(System.out.println("재생을 멈춥니다.");}
}

public class PlayerTest {
	public static void main(String[] args) {
		Player ap = new AudioPlayer(); // 다형성
		ap.play(100);
		ap.stop();
	}
}
  • Player ap = new AudioPlayer();
    • 추상 메서드여도 실제 객체는 AudioPlayer의 객체라서 사용 가능
profile
essential

0개의 댓글