추상화 문제
추상화의 내용에 대해서 자세히 공부를 했습니다. 이전 걸음을 통해서 abstract class나 interface를 확실히 이해를 하시면 좋을 것 같습니다. 이번 걸음에서는 추상화를 활용해서 소스를 만들어 볼 수 있도록 해보겠습니다.
추상화 문제로 동물 게임을 준비를 했습니다. 이전에 배웠던 내용을 토대로 소스를 구현을 해보시면 좋을 것 같습니다. 어려워도 최대한 풀어보시고 확인을 부탁합니다.
추상화인 abstract class를 활용하고 class 배열과 참조 자료형 변환등을 활용하여 이번 동물 게임 문제를 풀어보시면 됩니다. 정답을 공개를 하기 때문에 풀어보시고 어려우시면 정답을 확인 하고 공부를 하시면 분명 도움이 되실 수 있습니다.
추상화 문제 - 동물 게임
문제에 대한 내용은 위의 사진에 자세히 설명을 했습니다. 올바른 결과 출력과 잘못 입력을 한 경우도 출력이 되도록 구현을 해주세요. 참조 자료형 배열을 사용 해주세요.
※ Method 오버라이딩을 꼭 사용을 해야 합니다.
Main문에 소스를 구현해 주세요. 또한 static으로 Method를 생성을 하시면 됩니다.
실행 관련 걸음 : 다섯 걸음, 여섯걸음
import java.util.Random;
abstract class Animal{
String color;
abstract void print();
}
class Dog extends Animal{
Dog(String color){
super.color = color;
}
void print() {
System.out.println("나는 "+color+" 강아지 입니다.");
}
}
class Cat extends Animal{
Cat(String color){
super.color = color;
}
void print() {
System.out.println("나는 "+color+" 고양이 입니다.");
}
}
class Mia extends Animal{
Mia(String color){
super.color = color;
}
void print() {
System.out.println("나는 "+color+" 미어캣 입니다.");
}
}
class Panda extends Animal{
Panda(String color){
super.color = color;
}
void print() {
System.out.println("나는 "+color+" 판다 입니다.");
}
}
public class Q1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random r = new Random();
Animal[] woori = new Animal[10];
String[] color = {"빨간색","주황색","노란색","초록색","파란색","남색","보라색"};
for(int i = 0;i<woori.length;i++) {
int num = r.nextInt(4);
if(num == 0) {
woori[i] = new Dog(color[r.nextInt(7)]);
}
else if(num == 1) {
woori[i] = new Cat(color[r.nextInt(7)]);
}
else if(num == 2) {
woori[i] = new Mia(color[r.nextInt(7)]);
}
else {
woori[i] = new Panda(color[r.nextInt(7)]);
}
woori[i].print();
}
}
}
위의 소스처럼 추상화를 사용을 하기 위하여 abstract class를 부모로 생성을 합니다. 그리고 자식은 부모를 상속 받아서 Method 오버라딩을 해서 Method를 재정의를 했습니다. 마지막으로 부모로 업캐스팅한 배열을 생성해서 자식을 아우러서 배열에 담을 수 있습니다.
함께 보면 좋은 글
§ Java 마흔 세걸음 class(클래스)란?§ Java 마흔 네걸음 class(클래스) 예제
§ Java 마흔 다섯걸음 class(클래스) 문제 1
§ Java 마흔 여섯걸음 class 내부 용어 정리
§ Java 마흔 일곱걸음 null
§ Java 마흔 여덟걸음 생성자란?
§ Java 마흔 아홉걸음 has 란?
§ Java 오십 걸음 has 문제
§ Java 오십 한걸음 객체 심화
§ Java 오십 두걸음 class 배열
§ Java 오십 세걸음 class 배열 심화
§ Java 오십 네걸음 class 배열 문제
§ Java 오십 다섯걸음 오버로딩 기초
§ Java 오십 여섯걸음 Method 오버로딩
§ Java 오십 일곱걸음 생성자 오버로딩
§ Java 오십 여덟걸음 오버로딩 문제
§ Java 오십 아홉걸음 접근 제한자
§ Java 육십 걸음 접근 제한자 사용
§ Java 육십 한걸음 상속 기초
§ Java 육십 두걸음 상속 특징
§ Java 육십 세걸음 IS 관계
§ Java 육십 네걸음 상속 기초 문제
§ Java 육십 다섯걸음 참조 자료형 변환 기초
§ Java 육십 여섯걸음 참조 자료형 변환 심화 1
§ Java 육십 일곱걸음 참조 자료형 변환 심화 2
§ Java 육십 여덟걸음 Method Overriding 기초
§ Java 육십 아홉걸음 Method Overriding 심화
§ Java 칠십 걸음 Method super 란?
§ Java 칠십 한걸음 equals ?
§ Java 칠십 두걸음 final ?
§ Java 칠십 세걸음 추상화
§ Java 칠십 네걸음 abstract class
§ Java 칠십 다섯걸음 interface
§ Java 칠십 여섯걸음 추상화 심화