Ch7-31~32. 추상 클래스
0. 목차
Chapter7. 객체지향 프로그래밍Ⅱ
Ch7 - 31. 추상 클래스
Ch7 - 32. 추상 메서드
Ch7 - 31. 추상 클래스
▶ 추상 클래스(abstract class)란?
▷ 미완성 설계도
▷ 미완성 메서드를 갖고 있는 클래스
- 추상 메서드
- 구현부{}가 없는 미완성 메서드
- abstract를 붙임
abstract void play(int pos);
- 구현부{}가 없는 미완성 메서드
- 추상 클래스 : 추상 메서드를 갖고 있는 클래스
abstract class Player { abstract void play(int pos); }
▷ 다른 클래스 작성에 도움을 주기 위한 것
▷ 인스턴스 생성 불가
- 추상 클래스 = 미완성 설계도 → 제품 설계 불가
Player p = new Player(); // 에러! 추상 클래스의 인스턴스 생성 불가
▷ 상속을 통해 추상 메서드 완성시킨 후, 인스턴스 생성 가능
class AudioPlayer extends Player { // 미완성 설계도를 상속 → 완성 설계도
void play(int pos) { } // 추상 메서드 구현, 구현부{}를 만들어 줌
void stop() { } // 추상 메서드 구현
}
AudioPlayer ap = 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 { // 추상 클래스 상속 → 완전한 클래스?? : nope! 미완성 클래스 그래서 abstract 붙임
abstract void play(int pos) { } // 상속받은 추상 클래스의 추상메서드 2개 중 하나만 구현 → 미완성 클래스가 됨
}
▶ 추상 메서드 호출 가능
▷ 호출 시, 선언부만 필요
abstract class Player {
boolean pause; // 추상 클래스 내 iv, 일시정지
int currentPos; // 추상 클래스 내 iv, 현재 paly 위치
Player() { // 추상 클래스도 생성자有
pause = false;
currentPos = 0;
}
abstract void play(int pos); // pos에서 play!
abstract void stop(); // stop!
void play() { // 인스턴스 메서드
play(currentPos); // 추상 메서드 호출
}
}
- 인스턴스 메서드 사용법
- 클래스 객체 생성
- 추상 클래스를 객체 생성하려면 상속 해야 함
- 클래스 객체 생성
- 추상 메서드 사용법
- 자손 객체가 추상 클래스 상속
- 자손 객체가 구현부{} 생성
- 자손 객체가 추상 클래스 상속
- 인스턴스 메서드나 추상 메서드나 객체 생성 필요
- 그러나 추상 클래스에서는 객체 생성이 불가
- 결론 : 인스턴스 메서드
play
에 있는 추상 메서드play(currentPos)
를 사용하려면?
- 추상 클래스를 온전히 상속 받는 자손 생성
- 자손 클래스에서 조상 클래스의 모든 메서드의 구현부{} 생성
- 자손 클래스 객체 생성
- 객체.Play(currentPos) 호출하여 사용
- 추상 클래스를 온전히 상속 받는 자손 생성
dvdPlayer든 어떤 Player든 간에 abstract는 꼭 해야만 하는 것을 의미
▶ 실습
▷ 추상 클래스 상속, 구현부{} 만들기, 객체 생성, 추상 메서드 호출
abstract class Player {
abstract void play(int pos);
abstract void stop();
}
class AudioPlayer extends Player {
void play(int pos) { System.out.println(pos + "'부터 시작"); }
void stop() { System.out.println("stop"); }
}
class Test {
public static void main(String[] args) {
AudioPlayer ap = new AudioPlayer();
ap.play(100);
ap.stop();
}
}
// console
100'부터 시작
stop
▷ 객체 생성할 때, 실제 생성되는 객체 = AudioPlayer
▷ 리모콘은 AudioPlayer
, Player
둘 중 아무거나 상관 없음
AudioPlayer ap = new AudioPlayer();
Player ap = new AudioPlayer(); // 다형성