Daily coding

Java Basic : day 9 - Inheritance 상속 4 : 예시 본문

Language/Java_basic

Java Basic : day 9 - Inheritance 상속 4 : 예시

sunnnkim 2019. 11. 29. 17:50

상속 예시

 

 

 

// 부모클래스
public class StarCarft {

           // 목숨
           public void life() {
                      System.out.println("StarCraft life");
           }
}

 

// 자식1 : Tank

public class Tank extends StarCarft {

           // 오버라이딩
           public void life() {
                      System.out.println("Tank life");
           }

           public void canon() {
                      System.out.println("Tank canon");
           }
}

// 자식2 : Marin

public class Marin extends StarCarft {
           // 오버라이딩
           public void life() {
                      System.out.println("Marin life");
           }
           public void run() {
                      System.out.println("Marin run.");
           }
}

 

// 자식3 : Race

public class Race extends StarCarft {
           // 오버라이딩
           public void life() {
                      System.out.println("Race life");
           }

           public void fly() {
                      System.out.println("Race fly.");
           }
}

public class mainClass {
    public static void main(String[] args) {

            // 유닛을 n개 받아야하는 경우
            // 총 n개 중 몇 개의 종족을 선택할 지 사용자에게 달려있다.
           // 따라서, 부모 클래스로 배열을 잡고 동적할당은 종족별로 받도록 한다.

           // 잘못된 방법 (비효율적)
         //  Marin m[] = new Marin[10];


           // 아래 코드처럼 만들면
           // 다양한 자식 클래스를 무작위로 만들 수 있다.
           StarCarft starArr[] = new StarCarft[5];
           starArr[0] = new Marin();
           starArr[1] = new Tank();
           starArr[2] = new Race();
           starArr[3] = new Marin();
           starArr[4] = new Race();

           // Override 메소드 보기
           for (int i = 0; i < starArr.length; i++) {
                      starArr[i].life();
           }
           // 각각에 맞는 메소드가 호출 된다.

 

 


  instanceOf

          : 객체를 판별하는 예약어

           for (int i = 0; i < starArr.length; i++) {
                      if(starArr[i] instanceof Marin) { // Marin 클래스인지 확인하기
                                 Marin ma = (Marin) starArr[i]; // Marin 클래스의 독자적인 메소드 사용하기 위해 형변환
                                 ma.run(); // Marin 클래스에만 정의된 메소드 확인
                      }else if (starArr[i] instanceof Race) {
                                Race ra = (Race) starArr[i];
                                 ra.fly();
                      }else if (starArr[i] instanceof Tank) {
                                 Tank ta = (Tank) starArr[i];
                                 ta.canon();
                      }
           }
     }
}