8월 19일 TIL(항해 6일차)

코코·2023년 8월 20일
0

TIL(Today I Learned)

목록 보기
8/19
post-thumbnail

추상 클래스와 추상 메서드

1. 추상 클래스

추상클래스란? 미완성 설계도, 미완성 메서드를 갖고 있는 클래스

abstract class Player{		// 추상클래스(미완성 클래스)
	abstract void play(int pos);	// 추상메서드(몸통{}이 없는 미완성 메서드)
    abstract void stop();			// 추상메서드
}
  • 추상클래스는 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가.
Player p = new Player();	// (에러)추상 클래스의 인스턴스 생성 불가
  • 상속을 통해 자손 클래스에서 추상 메서드, 즉 몸통(내용)을 구현하게 강제한다.

  • WHY? 미완성 메서드가 있을 시, 객체 생성이 안되기 때문에 꼭 필요하고 필수적인 메서드는 작성해야 한다 알려주는 용도!

2. 추상 메서드

  • 선언부만 있고 구현부(몸통,{})가 없는 메서드, abstract가 붙는다.
  • 자손에서 구현해야 할 메서드
  • 조상으로부터 물려받은 추상 메서드 중 구현되지 않은 메서드가 있으면 자손클래스 역시 추상클래스 된다.
  • 자손마다 자손에게 맞는 내용으로 구현한다.
abstract class Player {				// 추상클래스
	abstract void play(int pos);	// 추상메서드
    abstract void stop();			// 추상메서드
}



// 추상클래스인 Player를 상속받아 내용(몸통 {})을 만들어 준 완전클래스

class AudioPlayer extends Player {
	void play(int pos) { /* 내용 생략 */ }	// 추상메서드를 구현
    void stop() { /* 내용 생략 */ }			// 추상메서드를 구현
}



// 추상클래스인 Player를 상속받아 void play() 추상메서드는 구현하였으나,
// void stop()은 구현하지 않았으므로(보이지는 않지만 void stop()은 생략되어 있음) 
// AbstractPlayer는 여전히 추상클래스(미완성 클래스)이다. 따라서 abstract를 클래스 앞에
// 표기해서 추상클래스임을 알려주어야 한다.

abstract class AbstractPlayer extends Player {
	void play(int pos) { /* 내용 생략 */ }	// 추상메서드를 구현
    // void stop();
}
abstract class Player { 
	boolean pause;		// 일시정지 상태를 저장하기 위한 변수
    int currentPos;		// 현재 Play되고 있는 위치를 저장하기 위한 변수
    
    Player() {			// 추상클래스도 생성자가 있어야 한다.
    	pause = false;
        currentPos = 0;
    }
    /** 지정된 위치(pos)에서 재생을 시작하는 기능이 수행하도록 작성되어야 한다. */
    abstract void play(int pos);	// 추상메서드
    
    /** 재생을 즉시 멈추는 기능을 수행하도록 작성되어야 한다. */
    abstract void stop();			// 추상메서드
    
    void play() {
    	play(currentPos);			// 추상메서드를 사용할 수 있다.
        // 메서드는 선언부만 알면 호출가능하므로 추상메서드도 호출 가능!!!
    }
    
profile
Just Do It

0개의 댓글