package CHAPTER06;

//부모 클래스: 도형(Shape)
class Shape {
	// 면적을 계산하는 메서드 (기본적으로 0 반환)
	double calculateArea() {
		return 0.0;
	}
}

//자식 클래스: 원(Circle)
class Circle extends Shape {
	double radius;
	
	// 생성자를 이용해 반지름(radius) 초기화
	Circle(double radius) {
		this.radius = radius;
	}

	// 메서드 오버라이딩: 원의 면적 계산
	@Override
	double calculateArea() {
		return Math.PI * radius * radius;
	}
}

//자식 클래스: 사각형(Rectangle)
class Rectangle extends Shape {
	double width, height;

	Rectangle(double width, double height) {
		this.width = width;
		this.height = height;
	}

	// 메서드 오버라이딩: 사각형의 면적 계산
	@Override
	double calculateArea() {
		return width * height;
	}
}

public class ShapeOverrideExample {
	public static void main(String[] args) {
		// 부모 타입(Shape)으로 자식 객체(Circle, Rectangle) 참조 → 다형성 적용
		Shape myCircle = new Circle(5.0);
		Shape myRectangle = new Rectangle(4.0, 6.0);
		
		// 오버라이딩된 메서드가 실행됨 (런타임 다형성)
		System.out.println("원의 면적: " + myCircle.calculateArea()); 
		System.out.println("사각형의 면적: " + myRectangle.calculateArea()); 
	}
}
