1) 추상 클래스란?
- 추상 클래스는 미완성 설계도 혹은 미완성 메소드를 갖고 있는 클래스입니다.
즉, 추상 메서드를 갖고 있으면 추상 클래스입니다.
abstract 키워드가 없으면 해당 클래스가 추상 메서드를 갖는지 아닌지 알 수 없습니다.
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();
2) 추상 메서드란?
- 추상 메서드란 미완성 메서드, 즉 구현부가 없는 메서드입니다.
추상 메서드는 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 사용합니다.
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){ /* 내용 생략 */ };
}
3) 추상 메서드의 실질적인 예
- PlayerTest라는 클래스를 만들고, Player를 만듭니다.
이 때, Player ap = new AudioPlayer(); 와 같이 선언할 수 있음에 주목해야 합니다.
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){
// Player p = new Player(); // 추상 클래스의 객체를 생성
// AudioPlayer ap = new AudioPlayer();
Player ap = new AudioPlayer(); // 다형성
ap.play(100);
ap.stop();
}
}
참고
남궁성 자바의 정석
'Java' 카테고리의 다른 글
함수형 인터페이스와 람다 표현식 [더 자바, Java 8] (0) | 2022.10.04 |
---|---|
Optional 소개 (더 자바, Java 8 강의) (0) | 2022.09.12 |
Optional (0) | 2022.09.02 |
예외 선언(Exception Handling) - 메서드에 예외 선언하기, finally 블럭 (0) | 2022.09.01 |
예외 처리(Exception Handling)(4) - 예외 발생시키기 (0) | 2022.08.30 |