JAVA/기초공부

[JAVA] 추상 클래스

SoU330 2024. 10. 9. 01:42

 

개요

  • 자바언어는 클래스들이 중심인 언어로서 문제 해결을 위한 클래스를 설계할 때 클래스의 사용과 구현을 분리하여 무엇을 해야 하는지에 중점을 두어 설계한다.
  • 슈퍼 클래스에서 행위에 해당하는 메소드를 나타내고 그 행위를 어떻게 하는지는 추상적으로 표현함으로써 무엇을 하는가를 알 수 있는 명세서를 제공한다.
  • 서브클래스에서 슈퍼 클래스의 메소드를 오버라이딩하여 실제 어떻게 해야하는지를 구현해야 한다.
  • 추상적으로 표현된 클래스는 인스턴스를 만들 수 없으며 실체가 없는 추상클래스가 된다.

 

 

 

 

 

추상 클래스 (Abstract  Class)

: 추상 메소드를 하나 이상 포함 하고 있는 클래스의 경우

추상 메소드는 메소드의 선언 부분만을 가지고 있으므로 상속 받은 자식 클래스에서 반드시 구현을 필요로 하는 메소드이다.

 

 

 

 

 

 

추상클래스의 목적

  • 공통 인터페이스 제공 - 추상 클래스는 공통적인 기능과 메서드를 정의함으로써 모든 하위 클래스가 일관된 방식으로 동작하도록 만든다.
  • 설계의 유연성 증가 - 추상 클래스를 사용하면 상속 구조를 통해 다양한 구현체를 쉽게 추가할 수 있으며 코드 재사용성과 유지 보수성을 높을 수 있다.

 

 

 

 

 

추상 클래스를 이용한 다형성의 구현

추상 클래스 SharpClass

public abstract class SharpClass {
    protected int x,y,z;

    // 생성자 오버로딩
    public SharpClass() {}

    public SharpClass(int x){
        this.x = x;
    }

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

    public SharpClass(int x, int y, int z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public abstract void areaCalculate(); // 추상 메소드
}

 

상속받은 클래스들 - CircleClass, RectangularClass, TraperziodClass

public class CircleClass extends SharpClass{
    protected int radius;

    public CircleClass(int radius) {
        this.radius = radius;
    }

    // areaCalculate() 메소드 오버라이딩
    public void areaCalculate() {
        double area = 3.141592 * radius * radius;
        System.out.printf("원의 면적 = %f\n",area);
    }
}

 

public class RectangularClass extends SharpClass{
    protected int length;
    protected int width;

    public RectangularClass(int length, int width) {
        this.length = length;
        this.width = width;
    }

    // areaCalculate() 메소드 오버라이딩
    public void areaCalculate() {
        int area = length * width;
        System.out.printf("사각형의 면적 = %d\n",area);
    }
}

 

public class TraperziodClass extends SharpClass{
    protected int topside;
    protected int bottomside;
    protected int height;

    public TraperziodClass(int topside, int bottomside, int height){
        this.topside = topside;
        this.bottomside = bottomside;
        this.height = height;
    }

    // areaCalculate() 메소드를 오버라이딩
    public void areaCalculate() {
        int area = ((topside + bottomside) * height) / 2;
        System.out.printf("사다리꼴의 면적 = %d\n",area);
    }
}

 

 

테스트코드

public class PolymorphismTest_01 {
    public static void main(String[] args) {
        CircleClass circle = new CircleClass(5);
        circle.areaCalculate();

        RectangularClass rectangular = new RectangularClass(15,20);
        rectangular.areaCalculate();

        TraperziodClass trapezoid = new TraperziodClass(15,20,5);
        trapezoid.areaCalculate();
    }
}

 

-> 추상 클래스를 상속받은 클래스들이 추상메소드 areaCalculate() 를 각각의 도형에 맞게 구현하였다.

 

 

 

 

 

 

 

 

 

 

 

 

 

'JAVA > 기초공부' 카테고리의 다른 글

[JAVA] 예외처리  (0) 2024.10.13
[JAVA] 인터페이스 (Interfaces)  (1) 2024.10.09
[JAVA] 형 변환, static, final  (2) 2024.10.09
[JAVA] 접근 제한자  (11) 2024.10.03
[JAVA] 메소드 오버라이딩  (0) 2024.10.01