728x90
이 글은 https://youtu.be/CXuA31XcBZ0 를 통해 개념 정리 후 복습용으로 정리한 글입니다.
문제시 바로 삭제하겠습니다.
추상 클래스(abstract class)
- 미완성 설계도. 미완성 메서드를 갖고 있는 클래스
abstract class Player { // 추상 클래스(미완성 클래스)
abstract void play(int pos); // 추상메서드(몸통{}이 없는 미완성 메서드)
abstract void stop(); // 추상메서드
}
- abstract - 추상 클래스라고 표현, 상속해서 구현하라는 의미
- 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가
Player p = new Player(); // 에러. 추상 클래스는 인스턴스 생성 불가
- 상속을 통해 추상 메서드를 완성해야 인스턴스 생성가능
class AudioPlyer extends Player {
void play(int pos) { ... } // 추상 메서드를 구현
void stop() { ... }
}
AudioPlyer ap = new AudioPlyer(); //OK
추상 메서드(abstract method)
- 미완성 메서드. 구현부 {}가 없는 메서드
abstract 리턴타입 메서드 이름();
- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우
abstract class Player { // 추상 클래스(미완성 클래스)
abstract void play(int pos); // 추상메서드(몸통{}이 없는 미완성 메서드)
abstract void stop(); // 추상메서드
}
abstract class AbstractPlayer extends Player {
void play(int pos) { ... } // 추상 메서드를 구현
}
- 추상 메서드 호출 가능(호출할 때는 선언부만 필요)
abstract class Player { // 추상 클래스(미완성 클래스)
boolean pause; // 일시정지 상태
int currentPos;// 현재 Play되고 있는 위치를 저장하기 위한 변수
Player() { // 추상클래스도 생성자가 있어야 한다.
pause = false;
currentPos = 0;
}
abstract void play(int pos); // 추상메서드
abstract void stop(); // 추상메서드
void play() {
play(currentPos); // 추상메서드를 사용할 수 있다.
// 메서드는 선언부만 알면 호출가능하므로 추상메서드도 호출 가능!!
// 상속통해 자손이 완성되면 -> 객체생성 가능 -> 메서드 사용 가능
}
}
추상클래스의 작성 목적
- 추상 메서드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메서드를 구현하도록 하기 위함이다.
- 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존클래스의 공통부분을 뽑아서 추상클래스를 만든다.
- 추상 메서드가 포함된 추상 클래스를 상속받은 모든 자식 클래스는 추상 메서드를 구현해야만 인스턴스를 생성할 수 있으므로 메소드를 놓치는 일을 예방할 수 있다.
728x90
'Java' 카테고리의 다른 글
[Java] 익명 클래스(anonymous class) (0) | 2022.12.27 |
---|---|
[Java] 내부 클래스(inner class) (0) | 2022.12.26 |
[Java] super, package, import, modifier, polymorphism (2) | 2022.12.23 |
[Java] Optional<T> (0) | 2022.12.08 |
[Java] 선언 위치에 따른 변수의 종류 (0) | 2022.12.05 |
댓글