ch7-31 추상 클래스(abstract classs)
다형성까지 이해를 해야지 이 시간 부터의 내용들이 이해가 간다.
- 미완성 설계도. 미완성 메서드를 갖고 있는 클래스
멤버가 적거나, 부족한 / 미완성 메서드를 가진 경우
미완성메서드 (추상메서드) = 몸통이 없는 메서드
이러한 메서드를 가지고 있는 클래스가 추상 클래스
추상 메서드는 몸통이 없는 대신에 abstract를 붙이면 된다.
- 다른 클래스 작성에 도움을 주기 위한 것, 인스턴스 생성 불가.
설계도가 완성되어야 제품이 생산될 수 있듯이 인스턴스 생성이 불가능하다.
- 상속을 통해 추상 메서드를 완성해야 인스턴스 생성가능
구현 - 추상 메서드 몸통 만들기
몸통을 만들었을 때는 더 이상 추상 메서드가 아니다
ch7-32 추상 메서드(abstract method)
- 미완성 메서드. 구현부 (몸통, {} )가 없는 메섣
abstract 리턴타입 메서드이름(); -- abstract는 제어자
꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우
조상 추상 클래스를 상속받았을 때, 추상 메서드를 모두 구현해야 한다.
즉 몸통을 작성해야지 추상클래스에서 벗어날 수 있고, 그렇지 않았을 경우에
실수로 abstract를 누락시키면 에러가 발생한다.
- 추상 메서드 호출 가능 (호출할 때는 선언부만 필요)
자손마다 play 의 기능 내용이 다를 경우에 몸통 부분을 선언할 수가 없다.
따라서 상속을 받을 때 해당 빈 설계도를 채움으로써 각 클래스마다 같은 기능이지만 방식이 다르 부분들의 설계도를 완성할 수 있다.
추상메서드를 호출 가능한가?
같은 클래스 내에서 몸통이 없는 부분을 호출하는 경우
인스턴스 메서드는 객체 생성 후에 호출할 수 있지만, 추상 클래스는 객체 생성이 불가능하다.
상속을 통해서 자손의 객체를 완성한 이후에 추상 메서드를 실행할 수 있다.
추상 메서드로 만들어 놓으면 더 많은 메서드를 만들 수 있다.
추상 메서드란 고현부가 없는 미완성 메서드이다.
그리고 이 미완성 메서드를 가지고 있는 클래스가 추상 클래스이다.
AudioPlayer 클래스에서 Player의 두 개 추상 메서드를 구현하지 않을 경우에
AudioPlayer에 abstract를 남겨줌으로써 구현부 내에 추상 메서드가 있다는 것을 알려야 한다.
또한 PlayerTest 클래스의 메인 메서드 내에서 new AudioPlayer() 와 같이 객체 생성은 불가능하다.
= 추상 클래스로 객체 생성은 불가능하다.
package ch07;
abstract class Player {
abstract void play(int pos);
abstract void stop();
}
///추상 클래스는 상속을 통해 완성해야 객체 생성 가능
class AudioPlayer extends Player {
void play(int pos) { System.out.println(pos + "분부터 재생합니다.");}
void stop() { System.out.println("재생을 중지합니다."); }
}
public class PlayerTest {
public static void main(String[] args) {
// Plyaer p = new Player(); // 추상 클래스의 객체 생성
// AudioPlayer ap = new AudioPlayer();
Player ap = new AudioPlayer();
// 기능을 다 갖고 있다. 리모콘이 추상메서드라고 해도 이미 기능이 구현된 메서드를 호출한다.
//audioPlayer 리모콘으로 호추루해도 되고, Player의 리모콘으로 호출해도 된다.
ap.play(100);
ap.stop();
}
}
'자바의정석' 카테고리의 다른 글
[자바의 정석 - 기초편] ch7-33,34 추상클래스의작성2 (0) | 2022.03.22 |
---|---|
[자바의 정석 - 기초편] ch7-33,34 추상클래스의작성1 (0) | 2022.03.22 |
[자바의 정석 - 기초편] ch7-29,30 여러 종류의 객체를 배열로 다루기 (0) | 2022.03.21 |
[자바의 정석 - 기초편] ch7-27,28 매개변수다형성 (0) | 2022.03.21 |
[자바의 정석 - 기초편] ch7-26 instanceof 연산자 (0) | 2022.03.21 |