자바의 정석 - 추상 클래스, 추상 메서드

송용준·2023년 3월 9일

추상 클래스(abstract class)

  • 미완성 설계도, 미완성 메서드를 갖고 있는 클래스
abstract class Player {
	abstract void play(int pos);	// 몸통이없는 메서드
    abstract void stop();
}
  • 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가
  • 상속을 통해 추상메서드를 완성해야 인스턴스 생성 가능
    --> 추상메서드를 상속받아 구현(몸통 만들기, { } 만들기)하기

추상 메서드

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

class AudioPlayer extends Player {
	void play(int pos){ }	// 추상메서드를 구현
    void stop(){ }	// 추상메서드를 구현
}

abstract class AbstractPlayer extends Player {
	void play(int pos) { } 	// 추상메서드를 구현
}

AbstractPlayer 클래스 생성시 abstract를 안붙이면 오류
--> 상속받은 것을 모두 구현해야 abstract를 안붙일 수 있음

  • 추상 메서드 호출 가능(호출할 때는 선언부만 필요)
    --> 나중에 상속받아서 설계도를 완성시켜야 함을 명시
    --> 조상이 만들어 놨다는 착각을 막아줌. 자손에서 만들어라
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 p = new Player(); // 추상 클래스의 객체를 생성
//		AudioPlayer ap = new AudioPlayer();
		Player ap = new AudioPlayer();
		ap.play(100);
		ap.stop();
	}
}

추상메서드로 껍데기만 만들어주고 상속받아서 자식클래스에서 구현해가지구
조상메서드가 자식생성자를 가리키면서 사용함
1. 조상 메서드로 만듦으로써 여러가지 자식생성자를 한번에 호출할 수 있음
2. 조상 메서드를 추상클래스로 만듦으로서 자식 생성자가 새로 메서드를 만들어야 함을 명시, 자식클래스에서 원하는 데로 수정하여 사용가능

profile
용용

0개의 댓글