본문 바로가기

JAVA

자바 기초 10 (객체 (Object) 지향의 활용)

예제

게임 캐릭터 공격 프로젝트를 구현

 

Hero.java

public class Hero {
// 게임 캐릭터를 의미, 부모클래스

  String name;

  public Hero (String name){
  // Hero라는 클래스를 초기화 해줄 수 있도록 생성자 만들기

    this.name = name;
    // 자신의 이름을 초기화 해줄수 있도록 만들어주기
  }
  public void attack() {
    System.out.println("주먹찌르기!");
  }
}

Warrior.java

public class Warrior extends Hero {

  public Warrior (String name) {
  // 생성자 만들어주기
  // 부모클래스 Hero가 가지는 name이라는 기본적인 자기 내부 변수를 초기화

    super (name);
    // super은 부모클래스의 생성자를 의미
    // 부모클래스가 가지고 있던 변수들을 초기화
  }

  public void groundCutting() {
    System.out.println ("대지 가르기");
  }
}

Archer.java

public class Archer extends Hero {

  public Archer (String name) {
 
    super (name);  
  }

  public void fireArrow() {
    System.out.println ("불화살");
  }
} 

Wizard.java

public class Wizard extends Hero {

  public Wizard (String name) {
    super (name);
  }

  public void freezing() {
    System.out.println ("얼리기");
  }
}

 

Main.java

public class Main {

  public static void main (String[] args) {
    
    Hero[] heros = new Hero[3];
    // 게임 캐릭터들을 담을 수 있는 Hero[] 배열 만들기
    배열 이름은 heros 라고 하기
    Hero가 총 3가지가 들어갈 수 있는 공간 만들기

    heros[0] = new Warrior("전사");
    heros[1] = new Archer("궁수");
    heros[2] = new Wizard("마법사");
    // 생성자를 이용한 다형성 기법으로 캐릭터들 초기화


    for (int i = 0; i < heros.length; i++) {
      heros[i].attack();

      if (heros [i] instanceof Warrior){
      // 현재 접근하고 있는 하나의 캐릭터가 전사인지 물어보는 것
      // 즉,  i번째 인덱스에 해당하는 하나의 게임 캐릭터가 Warrior의 instance인지 물어보는 것

        Warrior temp = (Warrior) heros[i];
        // 선택된 히어로를 전사 instance로 형변환
        temp.groundCutting();
      }

      else if (heros[i] instanceof Archer){
        Archer temp = (Archer) heros[i];
        temp.fireArrow();
      }

      else if (heros[i] instanceof Wizard){
        Wizard temp = (Wizard) heros[i];
        temp.freezing();
      }
    }
  }
}