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를 재정의를 했습니다.
마지막으로 부모로 업캐스팅한 배열을 생성해서 자식을 아우러서 배열에 담을 수 있습니다.