The Debugging Chronicles : "코드의 미학"

예제로 알아보는 자바의 인터페이스 본문

JAVA/자바 수업 내용

예제로 알아보는 자바의 인터페이스

sweetseonah1004 2024. 7. 15. 09:08
캐릭터 클래스가 있습니다.
캐릭터는 이름,레벨,무기를 가집니다.
캐릭터는 attack() 공격을 할수있습니다.
캐릭터가 무기를 가졌다면, 무기로 공격합니다.
캐릭터는 이름을 반드시 가져야합니다.
캐릭터는 레벨 10으로 시작합니다.
캐릭터에게 무기가 없다면 맨손으로 공격합니다...
무기를 이용한 공격이 성공한다면, 레벨이 +1 증가합니다.
캐릭터가 attack()을 성공했는지 실패했는지에 대한 결과를 main()에서 알수있습니다.
무기 클래스가 있습니다.
캐릭터가 무기를 활용해서 attack() 공격을 하기 때문에,
무기 클래스도 attack() 메서드를 구현해야합니다.

>>> 전체 코드

package class07;

import java.util.Random;

interface CharacAction {
   boolean attack();
}
class Charac implements CharacAction {
   String name;
   int level;
   Weapon weapon;
   Charac(String name){
      this(name,null); // null 없다 == 맨손
   }
   Charac(String name,Weapon weapon){
      this.name=name;
      this.level=10;
      this.weapon=weapon;
   }
   @Override
   public boolean attack() {
 
      if(this.weapon != null ) {
         
         if(this.weapon.attack()) {
            this.level++;
            return true;
         }
         System.out.println("무기공격 실패...");
      }
      else {
         System.out.println("맨손으로 공격...");
      }
      
      
      return false;
   }
}
abstract class Weapon implements CharacAction { // 포켓몬스터 : 추상클래스
   String name;
   Weapon(String name){
      this.name=name;
   }
   abstract public boolean attack(); // : 추상메서드
}
class Fork extends Weapon {

   Fork() {
      super("포크");
   }

   @Override
   public boolean attack() {
      if(new Random().nextBoolean()) {
         System.out.println("포크던지기~~");
         return true;
      }
      System.out.println("포크가 빗나갔습니다...");
      return false;
   }
   
}
class Gun extends Weapon { // 피카츄,파이리,...

   Gun() {
      super("총");
   }

   @Override
   public boolean attack() {
      System.out.println("빵야!");
      return true; // 백프로 성공하는 공격
   }
   
}
public class Test01 {
   public static void main(String[] args) {
      
   }

}