추상 클래스는 완전하게 구현되지 않는 메소드를 가지고 있는 클래스
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F404a9fb6-ab9b-45cc-8074-ee63a3334890%252F00f3f026-4879-4193-a470-1eb6c77204db%252FUntitled.png%3Ftable%3Dblock%26id%3Dab1163fd-e7a3-4a11-9050-1faace1fbf86%26cache%3Dv2&w=3840&q=75)
다형성을 했을 때 설명했던 내용이다.
도형 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(); } }
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F404a9fb6-ab9b-45cc-8074-ee63a3334890%252F2d35118d-61cd-4c5f-a8a1-c50f5e76b7a6%252FUntitled.png%3Ftable%3Dblock%26id%3Dff1528c6-1b80-4ff7-a1dd-cacf27f38598%26cache%3Dv2&w=3840&q=75)
- 추상 클래스를 활용하면 서브 클래스의 재정의를 강제할 수 있다.
- 추상 클래스는 메모리에 띄울 수 없다.
2. 오브젝트 클래스 (Object class)
자바 클래스에서는 명시적으로 부모 클래스를 선언하지 않으면 Object 가 부모 클래스가 된다.
Share article