추상 클래스 (abstract class)

1
post-thumbnail

추상 클래스?

  • 미완성 설계도. 미완성 메소드를 갖고 있는 클래스
  • 추상메소드 1개라도 가지고 있으면 추상클래스
abstract class Player { // 추상클래스 (미완성 클래스)
	abstract void play(int pos); //추상 메소드 (몸통{}이 없는 미완성 메소드)
    abstract void stop(); // 추상 메소드
    }

→ 추상 클래스는 다른 클래스 작성에 도움을 주기 위한 것임. 인스턴스 생성 불가
⇒ 미완성이므로 제품생산 불가

Player p = new Player(); // 에러, 추상클래스의 인스턴스 생성 불가.

↳ 상속을 통해 추상 메소드를 완성하면 인스턴스 생성이 가능

class AudioPlayer extends Player { // Player을 상속받아옴
	void play(int pos) { /* 생략 */ } // 추상메소드 구현
    void stop() { /* 생략 */ } // 추상메소드 구현
    }
    
AudioPlayer ap = new AudioPlayer(); // 추상메소드 구현했으므로, 인스턴스 생성 가능

추상 메소드?

  • 미완성 메소드. 선언부 + 구현부 중, 구현부(몸통 {})가 없는 메소드
    ⇒ 언제씀? 꼭 필요하지만, 자손마다 다르게 몸통(구현부)이 구현될 것으로 예상되는 경우
  • 주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명해 놓음.
abstract 리턴타입 메소드이름();   // {} 없음
  • 추상메소드를 2개 가지고있는 추상클래스 조상으로부터 상속(extends)받을 때, 1개만 구현할 수도 있고 2개의 추상메소드를 다 구현할 수도 있음. (자손마다 다르게 구현)
  • 그 추상메소드 2개 다 몸통을 구현하지않고, 1개만 구현하는 경우 여전히 abstract class임. 둘다 구현해주면 완전한 구상클래스.

출처

  • 자바의 정석 기초편 - ch 7-31,32
profile
백엔드를 공부하고 있습니다.

0개의 댓글