shape-polymorphism
Shape, Line, Rect, Circle 클래스 - 메소드 오버라이딩과 동적 바인딩
문제 설명
다음과 같은 도형 계층 구조를 가진 클래스를 작성하고,
업캐스팅과 메소드 오버라이딩을 이용하여 동적 바인딩이 어떻게 동작하는지 확인하는 프로그램을 작성하시오.
도형은 다음 네 가지 타입을 가진다.
Shape(기본 도형)LineRectCircle
Line, Rect, Circle 클래스는 모두 Shape 클래스를 상속받는다.
클래스 요구 사항
1. Shape 클래스
- 메소드
void draw()- 문자열
Shape를 한 줄에 출력한다.
- 문자열
예)
System.out.println("Shape");
2. Line 클래스
- 선언
class Line extends Shape
- 메소드
void draw()- 문자열
Line을 한 줄에 출력한다.
- 문자열
3. Rect 클래스
- 선언
class Rect extends Shape
- 메소드
void draw()- 문자열
Rect를 한 줄에 출력한다.
- 문자열
4. Circle 클래스
- 선언
class Circle extends Shape
- 메소드
void draw()- 문자열
Circle을 한 줄에 출력한다.
- 문자열
프로그램 동작 (Main 클래스)
Main 클래스의 main 메소드는 다음을 수행한다.
- 첫 번째 줄에서 정수
n을 입력받는다. (1 ≤ n ≤ 100) - 두 번째 줄에서 공백으로 구분된
n개의 문자열을 입력받는다.
각 문자열은 다음 네 값 중 하나이다."Shape""Line""Rect""Circle"
- 크기가
n인Shape타입의 배열을 선언한다.
예)Shape[] arr = new Shape[n]; - 입력으로 들어온 각 문자열에 대해
"Shape"→arr[i] = new Shape();"Line"→arr[i] = new Line();"Rect"→arr[i] = new Rect();"Circle"→arr[i] = new Circle();와 같이 객체를 생성하여 배열에 저장한다.
(업캐스팅이 일어남)
- 배열의 앞에서부터 순서대로 각 원소의
draw()메소드를 호출한다.- 각 호출마다 한 줄씩 출력된다.
- 출력에는 영어 단어(Shape, Line, Rect, Circle)와 개행 문자만 포함되도록 한다.
(한글, 기타 문자열은 출력하지 않는다.)
입력 형식
입력은 다음과 같이 주어진다.
n
type1 type2 ... typen
n은 도형의 개수 (정수)typei는Shape,Line,Rect,Circle중 하나의 문자열
예)
4
Line Rect Line Circle
출력 형식
총 n줄을 출력한다.
각 줄에는 해당 위치의 도형이 draw() 호출 시 출력하는 문자열을 출력한다.
예시 입력:
4
Line Rect Line Circle
예시 출력:
Line
Rect
Line
Circle