추상메소드는 어떤 내용이 들어갈지 미완성으로 남겨놓고(설계만 해놓고) 완성은 상속받은 자식 클래스에서 완성을 시키는 것이다.
메소드는 선언부와 구현부로 구성되어 있습니다.
public void message() : 선언부
{} : 구현부
public void message() {
}
미완성으로 남겨 놓는 이유는 메소드 내용이 상속 받은 클래스에 따라 달라질 수 있기 때문에 추상클래스(부모클래스)에서는 선언부만을 작성하고, 주석을 덧붙여 어떤 기능이 들어가야 하는지 알려주고 실제 내용은 상속 받은 클래스에서 구현하도록 비워준다.
추상메소드는 추상클래스와 같이 abstract를 통해 추상메소드인 것을 알 수 있습니다!
추상메소드는 구현부가 없기 때문에 구현부{} 대신 문장의 끝을 알리는 ';'로 적어줍니다.
당연하지만 추상메소드는 추상클래스에서만 구현이 가능합니다.예시) 추상메소드 사용법
abstract class Test { abstract void play(int pos); abstract void stop(); }
예시) 추상클래스 상속 받아 사용하는 방법
class Kakao extends Test { void play(int pos) { "추상메소드를 구현" } void stop() { "추상메소드를 구현" } }
추상메소드에서 구현부가 없는 메소드가 무슨 의미가 있을까 싶기도 하지만, 메소드를 작성할 때 실제 작성 내용인 구현부보다 더 중요한 부분이 선언부이다.
메소드의 이름과 메소드의 작업에 필요한 매개변수, 그리고 작업의 결과로 어떤 타입의 값을 반환할 것인가를 결정하는 것은 쉽지 않은 일이다. 선언부만 작성해도 메소드의 절반 이상이 완성되었다고 말할 수 있다.
메소드를 사용하는 쪽 자식클래스에서는 메소드가 실제로 어떻게 구현 되어있는지 몰라도 메소드이름 과 매개변수, 리턴타입, 즉 선언부만 알고 있으면 되므로 내용이 없어도 추상메소드를 사용하는 코드를 작성하는 것이 가능하고, 실제로는 자손클래스에 구현이 완성된 메소드가 호출도도록 할 수 있다.