Hello

Java 추상 클래스(abstract class), 추상 메서드(abstract method)

by 볼빵빵오춘기

추상 클래스(abstract class)

  • 미완성 설계도. 미완성 메서드를 갖고 있는 클래스
더보기
abstract class Player{ // 추상클래스(미완성클래스)
	abstract boid play(int pos); // 추상메서드(몸통{}이 없는 미완성 클래스)
	abstract boid stop(); // 추상메서드
}
  • 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가
더보기
Player p = new Player(); // 에러. 추상클래스의 인스턴스 생성 불가

⇒ 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능

 

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

AudioPlayer ap = new AudioPlayer();

⇒ 클래스 Player 는 미완성 클래스 였지만 AudioPlayer은 완성클래스 이기 때문에 abstract를 앞에 붙이지 않음

 

참고 : 몸통({})만들어주는 것을 ‘구현’이란 표현을 쓴다.

 

추상 메서드(abstract method)

미완성 메서드. 구현부(몸통,{})가 없는 메서드이다.

더보기

미완성 메서드. 구현부(몸통,{})가 없는 메서드이기 때문에 주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명하는 글을 작성해주자!

 

abstract 리턴타입 메서드이름();
abstract class Player{ 
	abstract boid play(int pos); // play가 움직일 때 작동하는 메서드
	abstract boid stop(); // play가 움직임을 멈출 때 작동하는 메서드
}

 

 

추상 메서드는 언제 쓰이나?

꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우에 쓰면된다.

abstract class Player{ // 추상클래스(미완성클래스)
	abstract boid play(int pos); // 추상메서드(몸통{}이 없는 미완성 클래스)
	abstract boid stop(); // 추상메서드
}

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

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

⇒ 클래스 AbstractPlayer 에 abstract 붙는이유는 stop()에 대한 구현을 안해주었기 때문이다.

⇒ why? 구현부의 메서드만 보면 추상클래스가 아니어보이지만 Player에서 상속을 stop(),play(int pos) 둘다 물려받았기 때문에 보이지 않지만 stop()이란 메서드가 있는것이다.

 

예제 코드

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();

	}

}

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기