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