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
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){ /* 내용 생략 */} // 추상메서드를 구현
// 1개의 추상메서드만 구현했으므로 아직 abstract상태가 유지됨
}
package codechobo;
public class PlayerExample {
public static void main(String[] args) {
AudioPlayer ap = new AudioPlayer();
ap.play(100);
ap.stop();
System.out.println();
Player ap2 = new AudioPlayer(); // 다형성
ap2.play(200);
ap2.stop();
}
}
abstract class Player{
boolean pause;
int currentPos;
Player(){
pause = false;
currentPos = 0;
}
/** 지정된 위치(pos)에서 재생을 시작하는 기능이 수행하도록 작성되어야 한다. */
abstract void play(int pos); // 추상 메서드
/** 재생을 즉시 멈추는 기능을 수행하도록 작성되어야 한다. */
abstract void stop();
void play(){ // 인스턴스 메서드
play(currentPos); // 추상 메서드를 사용할 수 있다.
}
}
class AudioPlayer extends Player{
void play(int pos){
System.out.println(pos+"위치 부터 play합니다.");
}
void stop(){
System.out.println("재생을 멈춥니다.");
}
}
100위치 부터 play합니다.
재생을 멈춥니다.200위치 부터 play합니다.
재생을 멈춥니다.