반응형
추상 클래스(abstract class)
- 미완성 설계도. 미완성 메서드를 갖고 있는 클래스
- 추상클래스로 인스턴스는 생성할 수 없다
- 추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다.
- 클래스 선언부의 abstact를 보고 이 클래스에는 추상메서드가 있으니 상속을 통해서 구현해주어야 한다는 것을 쉽게 알 수 있다
- 추상클래스는 추상메서드를 포함하고 있다는 것을 제외하고는 일반클래스와 전혀 다르지 않다. 추상클래스에도 생성자가 있으며, 멤버변수와 메서드도 가질 수 있다.
/* 주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명한다 */
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 {
void play(int pos) { /* 내용 생략 */ } //추상메서드를 구현
}
추상 메서드(abstact method)
- 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔것이 추상메서드
- 미완성 메서드. 구현부(몸통,{})가 없는 메서드
- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우
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) { /* 내용 생략 */ } // 추상메서드를 구현
}
추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상메서드를 모두 구현해주어야 한다. 만일 조상으로부터 상속받은 추상메서드 중 하나라도 구현하지 않는다면, 자손클래스 역시 추상클래스로 지정해 주어야 한다.
- 추상 메서드 호출 가능(호출할 때는 선언부만 필요)
abstract class Player{
boolean pause; // 일시정지 상태를 저장하기 위한 변수
int currentPos; // 현재 play되고 있는 위치를 저장하기 위한 변수
Player() { // 추상클래스도 생성자가 있어야 한다.
pause = false;
currentPos = 0;
}
/* 지정된 위치(pos)에서 재생을 시작하는 기능이 수행하도록 작성되어야 한다. */
abstract void play(int pos);
/* 재생을 즉시 멈추는 기능을 수행하도록 작성되어야 한다*/
abstract void stop();
void play() {
paly(currentPos); //추상메서드를 사용할 수 있다.
}
추상클래스의 작성
낱낱의 구체적 표상이나 개념에서 공통된 성질을 뽑아 이를 일반적인 개념으로 파악하는 정신 작용
추상화는 기존의 클래스의 공통부분을 뽑아내서 조상 클래스를 만드는 것
추상화 - 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업
구체화 - 상속을 통해 클래스를 구현, 확장하는 작업
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); // 추상메서드를 사용할 수 있다
}
void pause() {
if(pause) { //pause가 true일 때(정지상태)에서 pause가 호출되면,
pause = false; //pause의 상태를 false로 바꾸고,
play(currentPos); // 현재의 위치에서 play를 한다.
} else { //pause가 false일 떄(play상태) 에서 pause가 호출되면,
pause - true; //pause의 상태를 true로 바꾸고
stop(); //paly를 멈춘다.
}
}
}
- abstract를 붙여서 추상메서드로 선언하는 이유는 자손 클래스에서 추상메서드를 반드시 구현하도록 강요하기 위해서이다
총 정리
추상 클래스
- 구체적이지 않은 클래스를 의미한다
추상 클래스 정의
- 클래스앞에 abstract(애브스트랙트)키워드를 이용한다
- 추상클래스는 미완성된 추상메서드를 포함 할 수 있다
- 추상 클래스는 인스턴스를 생성할 수 없다.
추상 클래스를 상속받는 클래스 생성하기
- 추상 클래스를 상속받은 클래스는 추상 클래스가 갖고 있는 추상 메서드를 반드시 구현해야 한다
- 추상 클래스를 상속받고, 추상 클래스가 갖고 있는 메서드를 구현하지 않으면 해당 클래스도 추상 클래스가 된다.
추상 메서드
- 내용이 없는 메서드이다. 즉, 구현이 되지 않는 메서드이다
'Language > Java' 카테고리의 다른 글
싱글톤 (0) | 2021.09.19 |
---|---|
오버로딩 vs 오버라이딩 (0) | 2021.09.19 |
다형성 (0) | 2021.09.19 |
상속, 패키지, 접근 제어자 (0) | 2021.09.16 |
Static (0) | 2021.09.12 |