# 메소드 오버라이딩 메소드 오버라이딩(overriding)이란, 부모의 메소드를 자식이 재정의하는 것입니다. 메소드 오버라이딩은 부모와 자식이 똑같은 모양의 메소드를 가질 때 일어납니다. 예를 들어, 부모 클래스 Wizard의 파이어볼은 데미지가 10이고 자식 클래스 GreatWizard의 파이어볼은 30 데미지를 주기 원한다 합시다. ``` // 객체 생성 Wizard w = new Wizard(); GreatWizard gw = new GreatWizard(); // 에너지볼트! w.fireball(); // 데미지 10 gw.fireball(); // 데미지 30 ``` 이를 위해 먼저, 부모 클래스 Wizard의 파이어볼 메소드를 만듭니다. ``` class Wizard { public void fireball() { System.out.println("10 데미지를 줍니다"); } } ``` 그리고 자식 클래스 GreatWizard를 만들어줍니다. ``` class GreatWizard extends Wizard {} ``` 이제 대마법사는 마법사의 확장 클래스임으로, 파이어볼을 사용할 수 있습니다. 하지만 이 상태로 파이어볼은 쓴다면 데미지는 일반 마법사와 같은 10이 될겁니다. 이를 해결하기 위해, 똑같은 모양의 fireball() 메소드를 자식 클래스인 GreatWizard에서 재정의 즉, 오버라이딩합니다. ``` class GreatWizard extends Wizard { // 메소드 오버라이딩(재정의) public void fireball() { System.out.println("30 데미지를 줍니다"); } } ``` 메소드 오버라이딩(재정의)를 통해, 마법사와 대마법사의 파이어볼 마법에 차이가 생기게 되었습니다! ## 문제 주어진 코드로 정사각형, 삼각형, 원의 넓이를 구하려 한다. 이를 위해 아래와 같은 클래스 구조를 구현한 상황이다. ![클라우드스터딩-자바-도형-넓이-메소드-오버라이딩](https://i.imgur.com/GR4nV9f.png) 출력 예와 같은 결과를 얻도록, 메소드 오버라이딩을 통한 각 도형의 넓이를 구하시오. ## 출력 예 ``` 정사각형의 넓이 -> 25.00 삼각형의 넓이 -> 6.00 원의 넓이 -> 50.27 ```
관련 강의로 이동

코드: java 1.8

public class Overriding { public static void main(String[] args) { // 객체 생성 Square s = new Square(); Triangle t = new Triangle(); Circle c = new Circle(); // 객체 초기화 s.name = "정사각형"; s.length = 5; t.name = "삼각형"; t.base = 4; t.height = 3; c.name = "원"; c.radius = 4; // 업 캐스팅 객체 배열 만들기 Shape[] shapes = { s, t, c }; // 모든 도형의 넓이 계산 for (int i = 0; i < shapes.length; i++) { Shape tmp = shapes[i]; System.out.printf("%s의 넓이 -> %.2f\n", tmp.name, tmp.area()); } } } // 도형 class Shape { String name; // 도형의 넓이를 반환 public double area() { return 0; } } // 정사각형 class Square extends Shape { int length; // 한 변의 길이 /* 1. 정사각형 넓이를 구하도록 area()를 재정의하세요. */ } // 삼각형 class Triangle extends Shape { int base; // 밑변 int height; // 높이 /* 2. 삼각형 넓이를 구하도록 area()를 재정의하세요. */ } // 원 class Circle extends Shape { int radius; // 반지름 /* 3. 원의 넓이를 구하도록 area()를 재정의하세요. */ }

입력

정답이 궁금하다면? 코드를 제출해보세요!