Step it up now

추상메서드/ 추상클래스 본문

개인공부/JAVA

추상메서드/ 추상클래스

케잉 2023. 12. 12. 21:46


추상클래스 
- 클래스의 일부 메서드를 미완성 
- 미완성 메서드를 갖고있는 클래스 
- { }(구현부)가 없는 미완성 메서드 
꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 
-> 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();  // 추상적

 

 

 

'개인공부 > JAVA' 카테고리의 다른 글

메서드 호출, 값 전달  (1) 2024.01.15
인터페이스  (1) 2023.12.17
오버라이딩(overriding)  (0) 2023.12.04
다형성  (0) 2023.10.27
컬렉션 프레임워크  (0) 2023.10.23