남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다.
추상클래스 (abstract class)
- 미완성 설계도. 미완성 메서드를 갖고 있는 클래스
abstract class Player{
abstract void play(int pos); // 추상 메서드 몸통{}이 없는 미완성 메서드
abstract void stop();
}
- 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가
Player p = new Player() ; // 에러
- 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능
class AudioPlayer extends Player{
void play(int pos) { 내용작성 }
void stop() { 내용작성}
}
AudioPlayer ap = new AudioPlayer();
Player p = new AudioPlayer(); //다형성에 의해 ← 객체 생성 가능
추상 메서드 (abstract method)
- 미완성 메서드. 구현부 (몸통,{})가 없는 메서드
- abstract 리턴 타입 메서드 이름(); ← abstract 제어자 및 ; 필수! (꼭 필요하지만, 자손마다 다르게 구현될 것으로 예상되는 경우 추상메서드 사용)
abstract class Player{
abstract void play(int pos);
abstract void stop();
}
class AudioPlayer extends Player{
void play(int pos) { 내용입력 }
void stop (){ 내용입력}
}
// 추상 메서드가 없는것처럼 보이지만, Player 2개를 물려받으면, 2개를 다 구현해줘야하는데 1개만 구현해줬기 때문에 abstract class!
abstract class AbstractPlayer extends Player{
void play(int pos) { 내용 입력}
}
- 추상 메서드 호출 가능 (호출할 때는 선언부만 필요)
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); //추상메서드를 사용할 수 있다.
}
}
추상클래스 추상메서드 예제 PlayerTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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("재생을 멈춥니다.");
}
}
public class PlayerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// Player p = new Player(); // 추상클래스 객체 생성시 에러 발생
// AudioPlayer ap = new AudioPlayer();
// ap.play(100);
// ap.stop();
Player ap = new AudioPlayer(); //다형성
ap.play(100);
ap.stop();
}
}
|
cs |
출력
100위치부터 Play합니다
재생을 멈춥니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
자바의 정석 기초 (인터페이스의 장점) (0) | 2020.07.19 |
---|---|
자바의 정석 기초 ( 인터페이스 / 인터페이스 추상클래스 공통점 & 차이점 ) (0) | 2020.07.15 |
자바의 정석 기초 ( 매개변수 다형성 / 하나의 배열에 여러 종류 객체 저장 ) (0) | 2020.07.12 |
자바의 정석 기초 ( 참조변수의 형변환 / instanceof 연산자 ) (0) | 2020.07.12 |
자바의 정석 기초 ( 캡슐화 / 다형성) (0) | 2020.07.12 |
댓글