[AVA]オブジェクト配列&instanceof


📝 オブジェクト配列

  • 標準データ型の配列と同じで、同じクラスの複数のオブジェクトを
    集団化できる.
  • 同じクラスのオブジェクトは、配列を組み合わせて複数のオブジェクトを一度に制御することができる.
  • 一般的なデータ型の配列とオブジェクト配列の比較


    作成
  •    - 일반 데이터형의 배열
    	int[] data = new int[3];
        
    	- 객체 배열의 경우
    	Army[] data = new army[3];
  • アレイの要素割り当て処理
  •   - 일반 데이터 형 배열의 경우
          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();
  • 標準データ型には、1つの値しか指定されていません.
    オブジェクト配列は、「new」を使用してオブジェクトを割り当てる必要があります.
  • オブジェクト配列の使用


    子クラスのオブジェクトを親クラスの配列
  • に入れる
  • 配列の作成が親として指定されている場合、すべてのサブクラスのオブジェクト
    列に入れることができます.
  •  	Unit[] unit = new Unit[3];
    	// 배열의 요소 할당과정에서 암묵적 형변환이 이루어진다.
    	unit[0] = new Army();
    	unit[1] = new Navy();
    	unit[2] = new AirForce();

    instanceof演算子


    オブジェクトタイプをチェックする演算子

  • アレイの各要素は、元のクラスとして機能を拡張します.
    明示的な変換が必要です.
    しかし,最初の要素が最初にどのクラスから生成されたかを判断するのは難しい.
  • の場合、instanceof演算子を使用してオブジェクトのソースを決定します.
    ブール型は結果を返すことができます.
  • class Parent{}
    class Child extends Parent{}
    
    public class Main {
    
    	public static void main(String[] args) {
    		Parent p = new Parent();
    		Child c = new Child();
    		
    		System.out.println(p instanceof Parent);		
    		System.out.println(p instanceof Child);				
    		System.out.println(c instanceof Parent);			
    		System.out.println(c instanceof Child);			
    
    	}
    
    }
    👉 実行結果
    true
    false
    true
    true
    オブジェクト配列とサンプルコード-<オブジェクト変換文書のコードを参照>
    public class Main {
    
    	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호");
    
    		// 부대 일괄 공격 attak();
    		for (int i = 0; i < units.length; i++) {
    			units[i].attack();
    			
    			// 각 기능의 고유한 기능 호출
    			if (units[i] instanceof Army) {
    				Army temp1 = (Army)units[i];
    				temp1.tank();
    			} 
    			
    			if (units[i] instanceof Navy) {
    				Navy temp2 = (Navy)units[i];
    				temp2.nucleus();
    			} 
    			
    			if (units[i] instanceof AirForce) {
    				AirForce temp3 = (AirForce)units[i];
    				temp3.bombing();
    			}
    			
    			System.out.println("-----------------------------");
    		}
    		
    	}
    
    }
    👉 実行結果
    공군1>>> 공격준비 
    공군1>> 이륙
    공군1>> 공중공격 실행
    공군1>> 폭격
    -----------------------------
    공군2>>> 공격준비 
    공군2>> 이륙
    공군2>> 공중공격 실행
    공군2>> 폭격
    -----------------------------
    해군1>>> 공격준비 
    해군1>> 어뢰발사
    해군1>> 지상 상륙
    해군1>> 핵미사일
    -----------------------------
    육군1>>> 공격준비 
    육군1>> 지상공격 실행
    육군1>> 탱크공격
    -----------------------------
    육군2>>> 공격준비 
    육군2>> 지상공격 실행
    육군2>> 탱크공격
    -----------------------------