추상 클래스는 완전하게 구현되지 않는 메소드를 가지고 있는 클래스
다형성을 했을 때 설명했던 내용이다.
도형 class 를 정의할 때 구체적으로 어떤 도형인지 알 수 없으므로 구체적인 동작을 구현하기 어렵다. 도형을 그린다고 가정할 때 구체적으로 어떤 모양을 그려야 하는지 알 수 없다.
이런 경우 도형이라는 클래스 내에 삼각형, 사각형 , 원 등으로 구분할 수 있는데 이런 경우 도형 클래스를 추상 클래스라고 정의한다.
abstract class Shape { public abstact void draw() }
추상 클래스는 하나 이상의 추상 메서드를 가지고 있어야 하고, 그를 상속받는 자식 클래스는 반드시 추상클래스를 재정의 해야한다.
class Circle extends Shape { public void draw() { System.out.println("원"); } }
추상 클래스를 사용하는 이유
class Shape { public void draw(){} }
이렇게 추상 클래스를 사용하지 않고 일반 클래스에서 오버라이드 가능하고 결과도 동일하다.
하지만 추상 메서드로 정의하면 서브 클래스에서는 반드시 구현을 강요해야 한다.
추상 메서드가 아니면 자식 클래스에서는 재정의 하지 않고 넘어갈 수 있기 때문에 추상 메서드를 강제하고 싶을 때 추상 클래스를 이용한다.
abstract class Shape { public abstract void draw(); } class Rectangle extends Shape { public void draw() { System.out.println("사각형"); } } class Circle extends Shape { public void draw() { System.out.println("원"); } } public class AbstractTest { public static void main(String[] args) { Shape c = new Circle(); Shape r = new Rectangle(); c.draw(); r.draw(); } }
- 추상 클래스를 활용하면 서브 클래스의 재정의를 강제할 수 있다.
- 추상 클래스는 메모리에 띄울 수 없다.
2. 오브젝트 클래스 (Object class)
자바 클래스에서는 명시적으로 부모 클래스를 선언하지 않으면 Object 가 부모 클래스가 된다.
Share article