ch7-32 추상 메서드(abstract method)
추상메서드는 구현부({})가 없는 메서드 이기 때문에, play 메서드에 오류가 발생한다. play 메서드에 제어자 abstract를 작성한다.
play 메서드에 abstract를 작성해도 오류가 발생한다. 추상 클래스는 추상메서드를 갖고 있는 클래스로 추상메서드와 같이 제어자 abstract를 작성해야한다.
오류가 사라졌다.
void stop(); 메서드를 추가하면 오류가 발생한다. 구현부를 만들어주면 오류가 사라지지만, 앞에 제어자 abstract를 적어주면 된다.
✅ cannot instantiate the type Player 오류에서 instantiate의 뜻은 인스턴스화 할 수 없다는 뜻이고, 즉 Player type의 인스턴스를 생성하지 못한다(객체를 생성하지 못한다)는 뜻이다.
⭐⭐추상클래스는 상속을 통해 객체 생성이 가능하다.
AudioPlayer 클래스에 Player 클래스를 상속받아 재생과 정지의 메서드인 play, stop의 구현부({})를 만들어준다. 추상클래스는 객체 생성이 불가능했지만, AudioPlayer 클래스는 객체 생성이 가능하다.
따라서 main 메서드에서 AudioPlayer 클래스 객체 생성으로 play, stop메서드가 사용 가능하다.
참조매개변수를 추상클래스인 Player로 객체를 생성해도 가능하다. 이 개념이 객체지향에서 중요한 다형의 예시이다.
참조 매개변수가 추상 클래스 type이라 하더라도 연결된 객체 AudioPlayer는 구현부를 갖고 있어 기능이 있다. 실제 연결된 것은 new AudioPlayer로 객체가 생성됐다. 따라서 참조 매개변수는 선언부만 있어도 호출이 가능하다.
추상 클래스를 상속받은 클래스는 추상 클래스가 갖고있는 모든 메서드를 구현해야 한다.
실은 abstract void stop( );이 숨어있는 것이다. 따라서 이 오류를 해결하기 위해서는
1. stop메서드의 구현부를 만든다.
2. AudioPlayer 클래스에 abstract 제어자를 작성한다.
2번째 방법의 문제점은 추상 클래스는 객체 생성이 불가능하므로, 메인 클래스에서 생성했던 AudioPlayer에 오류가 발생한다.
⭐ 추상 클래스를 상속받으면 모든 메서드를 구현해야 한다.
'자바 > 자바의 정석 Ch.7 객체지향 프로그래밍 II' 카테고리의 다른 글
ch7-10,11 참조변수 super, 생성자 super() (0) | 2023.04.15 |
---|---|
ch7-7~9 오버라이딩(overriding) (0) | 2023.04.13 |
ch7-5,6 단일상속 (0) | 2023.04.13 |
ch7-3,4 클래스 간의 관계, 상속과 포함 (0) | 2023.04.13 |
ch7-1,2 상속 (0) | 2023.04.13 |