일반 데이터 형의 배열
int[ ] data = new int[3];
객체 배열의 경우
Army[ ] data = new Army[3];Army a1 = new Army();
Army a2 = new Army();
Army a3 = new Army();
- 일반 데이터 형 배열의 경우
data[0] = 10;
data[1] = 20;
data[2] = 35;
- 객체 배열의 경우
Army a1 = new Army();
data[0] = new Army();
data[1] = new Army();
data[2] = new Army();
Unit[] unit = new Unit[3];
// 배열의 요소 할당과정에서 암묵적 형변환이 이루어진다.
unit[0] = new Army();
unit[1] = new Navy();
unit[2] = new AirForce();
package boxing;
public class Unit {
private String name;
// 생성자를 정의
public Unit(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 재정의 대상
public void attack() {
System.out.println(this.name + " >>> 공격준비!!! ");
}
}
------------------------------------------------------------
package boxing;
public class AirForce extends Unit{
public AirForce(String name) {
super(name);
}
@Override
public void attack() {
super.attack();
System.out.println( this.getName() + " >> 이륙" );
System.out.println( this.getName() + " >> 공중공격 실행" );
}
public void bombing() {
System.out.println(
this.getName() + " >> 폭격");
}
}
------------------------------------------------------------
package boxing;
public class Army extends Unit {
// 부모 클래스의 생성자를 강제 호출하기 위한 생성자
public Army(String name) {
super(name);
}
// 공격의 형태를 육군에 맞게 변경하지만,
// 부모 클래스가 가지고 있는 공격 준비 기능을
// super 키워드를 통해 보전
@Override
public void attack() {
super.attack();
System.out.println( super.getName() + " >> 지상공격 실행" );
}
public void tank() {
System.out.println(
super.getName() + " >> 탱크공격");
}
}
------------------------------------------------------------
package boxing;
public class Navy extends Unit{
public Navy(String name) {
super(name);
}
@Override
public void attack() {
super.attack();
System.out.println( this.getName() + " >> 어뢰발사" );
System.out.println( this.getName() + " >> 지상 상륙" );
}
public void nucleus() {
System.out.println(
this.getName() + " >> 핵미사일");
}
}
------------------------------------------------------------
package boxing;
public class Main02 {
public static void main(String[] args) {
// 부대지정
Unit[] units = new Unit[5];
units[0] = new AirForce("공군1호");
units[1] = new AirForce("공군2호");
units[2] = new Navy("해군1호");
units[3] = new Army("육군1호");
units[4] = new Army("육군2호");
// 부대 일괄 공격 attack();
// units[0].attack();
// units[1].attack();
// units[2].attack();
// units[3].attack();
// units[4].attack();
// 각 기능의 고유한 기능 호출
for( int i = 0; i<units.length; i++ ) {
units[i].attack();
// 각 기능의 고유한 기능 호출
if( units[i] instanceof Army ) {
Army a = (Army)units[i];
a.tank();
} else if( units[i] instanceof Navy ) {
Navy n = (Navy)units[i];
n.nucleus();
} else {
AirForce f = (AirForce)units[i];
f.bombing();
}
}
}
}
result
공군1호 >>> 공격준비!!!
공군1호 >> 이륙
공군1호 >> 공중공격 실행
공군1호 >> 폭격
공군2호 >>> 공격준비!!!
공군2호 >> 이륙
공군2호 >> 공중공격 실행
공군2호 >> 폭격
해군1호 >>> 공격준비!!!
해군1호 >> 어뢰발사
해군1호 >> 지상 상륙
해군1호 >> 핵미사일
육군1호 >>> 공격준비!!!
육군1호 >> 지상공격 실행
육군1호 >> 탱크공격
육군2호 >>> 공격준비!!!
육군2호 >> 지상공격 실행
육군2호 >> 탱크공격
if(units[0] instanceof Army) { // units[0]에 할당되어 있는 객체가 Army 인지 아닌지 (true or false)
Army temp1 = (Army)units[0];
temp1.tank();
}