완전하게 구현되어 있지 않은 메소드를 가지고 있는 클래스

두가지 이점을 가진다.

동적 할당(new) 불가 원래 빈 메소드라 new를 해도 의미가 없으니 막아둘 수 있음

자식 클래스가 무조건 추상 메소드를 재정의하도록 강제함

(오류가 발생하기 때문에 실수를 방지할 수 있음)

메소드 오버로딩 하려면 이름이 같아야하니 자식 클래스 메서드 이름이 같아짐

아래에서 위로 코드를 작성할 때 유용함?

package ex07;

// abstract = 추상 클래스, 추상 메소드
abstract class Shape {
    int x, y;

    public void translate(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public abstract void draw();
}

class Rectangle extends Shape {
    int width, height;

    public void draw() {
        System.out.println("사각형 그리기 메소드");
    }
}

class Circle extends Shape {
    int radius;

    public void draw() {
        System.out.println("원 그리기 메소드");
    }
}

public class AbstractTest {
    public static void main(String[] args) {
        Shape s2 = new Circle();
        s2.draw();
    }
}