추상메서드/ 추상클래스
추상클래스
- 클래스의 일부 메서드를 미완성
- 미완성 메서드를 갖고있는 클래스
- { }(구현부)가 없는 미완성 메서드
꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우
-> cd플레이어, dvd플레이어 모두 다르게 작동되고 멈추는 방식이 있을 테니까
abstract class Player {
abstract void play (int pos);
abstract void stop( );
}
-> 추후에 상속통해 자손이 완성된다
추상메서드 호출 가능 ( 호출할떄는 선언부만 필요)
abstract class Player {
boolean pause; //일시정지 상태를 저장하기 위한 변수
int currentPos; // 현재 play되고 있는 위치를 저장하기 위한 변수
Player() { //추상클래스도 생성자가 있어야 한다
pause = false ;
currentPos = 0;
}
//지정된 위치(pos)에서 재생 시작하는 기능 수행하도록 작성
abstract void play (int pos);
//재생을 멈추는 기능 수행하도록 작성
abstract void stop ( );
player라면 스탑하고 플레이 할 수 있어야해
너희는 상속을 통해 너네에 맞게 구현해야해
cf) 추상클래스: 객체생성 불가
인스턴스 매서드: 객체 생성후 호출 가능
방법 => 1. 상속을 통해 자손 완성한 후
2. 자손객체생성
DvdPlayer d = new DvdPlayer();
d.play();
자손을 객체생성했으니 완성되어 호출 가능
void play ( ){
play (currentPos);
}
다른 클래스 작성에 도움주기 위한 것.
인스턴스 불가
Player p = new Player( ); //에러 추상클래스(미완성)의 인스턴스 생성 불가
상속을 통해 추상 메서드를 완성해야 인스턴스 생성가능
미완성 아닌 클래스
class AudioPlayer extends Player {
void play(int pos) { } //추상메서드 몸통{ }구현
void stop ( ) { } // 추상메서드 { } 구현
}
* 상속받았는데 메서드 두개중 1개만 구현해도 에러뜸
기존 클래스의 공통부분을 뽑아서 추상클래스를 만든다 -> 코드 중복 제거
공통부분 모아놓으면 배열로 짤 수 있다
int: 기본형
int[ ]: 배열의 타입이 참조형
객체배열: 참조변수를 묶은 것
추상화
추상화된 코드는 구체화된 코드보다 유연하다 -> 변경에 유리
GreorianCalendar cal = new GregorianCalendar (); // 구체적
Calendar cal = Calendar.getInstance(); // 추상적