구독을 신청하세요!

평생 구독! 19,800 원(이벤트 기간 한정)


기업은행: 206-021800-01-029

예금주: 박세홍


카톡 ID: chaesam

이메일: mail@cloudstudying.kr

# 메소드 오버라이딩 #### 메소드 재정의 메소드 오버라이딩(overriding)이란, 부모의 메소드를 자식 클래스에서 재정의하는 것입니다. #### 활용 예 가령 부모 클래스 Wizard의 파이어볼은 데미지가 10일 때, 이를 물려받은 자식 클래스 GreatWizard에서는 30 데미지를 주고 싶다면 어떻게 해야 할까요? ``` class Wizard { public void fireball() { System.out.println("10 데미지를 줍니다"); } } ``` 이때 사용하는 개념이 메소드 오버라이딩입니다. 아래의 GreateWizard 클래스는 부모 Wizard의 fireball() 메소드를 새롭게 재정의합니다. ``` class GreatWizard extends Wizard { // 메소드 오버라이딩(재정의) public void fireball() { System.out.println("30 데미지를 줍니다"); } } ``` 메소드를 재정의함으로써, GreatWizard 객체의 파이어볼 데미지가 상승하였습니다. ``` Wizard w = new Wizard(); w.fireball(); // 10 데미지를 줍니다 GreatWizard gw = new GreatWizard(); gw.fireball(); // 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(); s.name = "정사각형"; s.length = 5; // 객체 생성 및 초기화 - 정삼각형 Triangle t = new Triangle(); t.name = "삼각형"; t.base = 4; t.height = 3; // 객체 생성 및 초기화 - 원 Circle c = new Circle(); 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()를 재정의하세요. */ }

입력

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