- 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가 - 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능 예시)
abstract class Player{
abstract void play(int pos);
abstract void stop();
}
class AudioPlayer extends Player{
void play(int pos){/*생략 */}
void stop(){/* 생략 */}
}
public class Main {
public static void main(String[] args) {
AudioPlayer audioPlayer = new AudioPlayer();
}
}
ch7-32 추상메서드(abstract method)
- 미완성 메서드 구현부(몸통{})가 없는 메서드 [형식]
abstract 리턴타입 메서드이름();
꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 사용
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) { /* 생략 */} // 추상 메서드 구현
/* stop 추상 메서드를 구현하지 않았기 때문에 클래스 앞에 abstract 붙여야함
AbstractPlayer는 추상 클래스이기 때문에 인스턴스를 생성할 수 없음 */
}
- 추상 메서드를 호출할 때는 선언부만 있어도 가능하다
abstract class Player{
boolean pause; // 일시정지 상태를 저장하기 위한 변수
int currentPos; // 현재 play 되고 있는 위치를 저장하기 위한 변수
Player(){ // 추상 클래스도 생성자 필요!
pause = false;
currentPos =0;
}
/* 지정된 위치 (pos)에서 재생을 시작하는 기능을 수행해야 한다 */
abstract void play (int pos); // 추상메서드
/* 재생을 즉시 멈추는 기능을 수행해야 한다 */
abstract void stop(); // 추상 메서드
void play(){ // 인스턴스 메서드
play(currentPos); // 선언부만을 통해 추상 메서드 호출 할 수 있다.
}
}
/* 상속을 통해 자손 완성 -> 자손 객체 생성
ex) DvdPlayer d = new DvdPlayer();
d.play(); 가능
*/
실습
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("재생을 멈춥니다");
} // 추상 메서드 구현
void fast(){
System.out.println("빨리 실행 중");
}
}
public class Main{
public static void main(String[] args) {
System.out.println("자손 클래스 객체)");
AudioPlayer ap = new AudioPlayer();
ap.play(100);
ap.stop();
ap.fast();
System.out.println();
System.out.println("부모 클래스 객체)");
Player p = new AudioPlayer(); // 다형성 때문에 가능
p.play(20);
p.stop();
//p.fast(); 에러
}
}