# 인터페이스와 업캐스팅
#### CODE <a class='btn btn-default' href='/codes/51589'>Link</a>
```
public class ObjectGrouping {
public static void main(String[] args) {
// 다양한 객체 생성
Bird bird = new Bird("새");
Helicopter copter = new Helicopter("헬기");
Rocket rocket = new Rocket("로켓");
// 인터페이스 타입으로 그룹화
Flyable[] flyableThings = { bird, copter, rocket };
// 모든 날것들을 날림
for (int i = 0; i < flyableThings.length; i++) {
Flyable temp = flyableThings[i];
temp.fly();
}
}
}
interface Flyable {
public void fly();
}
class Bird implements Flyable {
private String name;
public Bird(String name) {
this.name = name;
}
/* 1. fly() 메소드를 오버라이딩 하세요. */
public void fly(){
System.out.printf("<%s>가 날개를 퍼덕이며 날아갑니다!\n", this.name);
}
}
class Helicopter implements Flyable {
private String name;
public Helicopter(String name){
this.name = name;
}
/* 2. fly() 메소드를 오버라이딩 하세요. */
public void fly(){
System.out.printf("<%s>가 프로펠러를 힘차게 돌리며 날아갑니다!\n", this.name);
}
}
class Rocket implements Flyable {
private String name;
public Rocket(String name){
this.name = name;
}
/* 3. fly() 메소드를 오버라이딩 하세요. */
public void fly(){
System.out.printf("<%s>이 제트 엔진을 분출하며 날아갑니다!\n", this.name);
}
}
```
#### INPUT
```
```
#### OUPUT
```
<새>가 날개를 퍼덕이며 날아갑니다!
<헬기>가 프로펠러를 힘차게 돌리며 날아갑니다!
<로켓>이 제트 엔진을 분출하며 날아갑니다!
```