자바

추상 메소드

growdeveloper 2021. 4. 8. 18:22

추상 메소드(abstract method)란 선언은 되어 있으나 코드가 구현되어 있지 않은, 즉

껍데기만 있는 메소드이다. 추상 메소드를 작성하려면 abstrat 키워드와 함께 원형만 선언하고 코드는 작성하지 않는다.

 

public abstract String getName();
public abstract String void setName(String s);

 


추상 클래스 만들기

 

추상 클래스(abstract class)가 되는 경우는 다음 2가지로서. 모두 abstract 키워드로 선언해야한다.

 

  • 추상 메소드를 포함하는 클래스
abstract class Shape () { // 추상 클래스 선언
	public Shape() {}
    public void paint() { draw{}; }
    abstract public void draw(); // 추상 메소드 선언
}
  • 추상 메소드가 없지만 abstract 로 선언한 클래스
abstract class MyComponent {
	String name;
    public void load(String name) {
    	this.name = name;
    }
}

 

앞의 shape과 MyComponent 모두 추상 클래스이다. Shape은 추상 메소드를 가진 추상 클래스 이며, Mycomponent는 추상 메소드 없는 추상 클래스이다. 추상 메소드를 가지고 있으면 반드시 추상 클래스로 선언되어야 한다.


추상 클래스를 객체를 생성할 수 없다.

응용프로그램은 추상 클래스의 객체(인스턴스)를 생성할 수 없다. 추상 클래스는 본디 객체를 생성할 목적으로 만드는 클래스가 아니다. 실행코드가 없는 미완성 상태인 추상 메소드가 있을 수 있기 때문에, 다음과 같이 추상 클래스의 객체를 생각하는 코드에는 컴파일 오류가 발생한다.

 

public class AbstractError {
	public static void main(String [] args) {
    	Shape shape;
		shape = new Shape();
	}
}

 

추상클래스의 레퍼런스 변수를 선언하는 것은 오류가 아니다.


추상 클래스의 상속

추상 클래스를 단순히 상속받는 서브 클래스는 추상 클래스가 된다. 추상 클래스의 추상 메소드를 그대로 상속받기 떄문이다. 그러므로 서브 클래스에 abstract를 붙여 추상 클래스 임을 명시해야 컴파일 오류가 발생하지 않는다. 그러므로 서브 클래스에 abstract를 붙여 추상 클래스임을 명시해야 컴파일 오류가 발생하지 않는다. 다음과 같이 추상 클래스 Shape을 상속받는 Line 클래스에서 추상 메소드인 draw()를 오버라이딩 하지 않으면 자동으로 추상 클래스가 되므로, line은 abstract 키워드를 사용하여 추상 클래스임을 명시해야 한다.

 

public abstract class shape {

	
	public shape() {}
	public void paint() { draw(); }
	abstract public void draw();//추상 메서드

}
abstract class Line extends shape {
	public String toString() {return "Line";}
}