[Java]상속 예제 연습

박중연·2024년 3월 24일

상속 예제를 통한 연습

지난 포스트에서 상속에 대해 공부 후 이번 포스트에서는 예제를 활용하여 연습 하려고한다.

연습내용

위 이미지와 같은 형태로 무기이름(String)과 데미지(Int)를 입력하면 해당무기로 공격하고 공격받은 데미지를 출력한 후 해당 무기에 공격받는 사운드를 출력하는 예제이다.
Gun, OneHandSword, magic 클래스는 Attackable클래스를 상속 받아 안에 있는
attack()메소드를 overiding 하여 구현 하였다.

1.메인구현

public static void main(String[] args){
        Character c1 = new Character();
        Attackable gun = new Gun("AK-47", 14);
        Attackable sword = new OneHandSword("한손검",10);
        Attackable magic = new Magic("에너지볼트", 47);

        //총 장착
        c1.setWeapon(gun);
        c1.attack();
        System.out.println();

        System.out.println("=======무기변환=======");
        System.out.println();
        //한손검 장착
        c1.setWeapon(sword);
        c1.attack();
        System.out.println();

        System.out.println("=======무기변환=======");
        System.out.println();
        c1.setWeapon(magic);
        c1.attack(); 

2.Character클래스 구현

public class Character {
    Attackable weapon; 

    public static character(Attackable weapon) {
        this.weapon = weapon;
    }
 
    public static character(){

    }
  
    public void attack(){
        weapon.attack();
    }

    public Attackable getWeapon() {
        return weapon;
    }

    public void setWeapon(Attackable weapon) {
        this.weapon = weapon;
    }

}

3.Attackable클래스 구현

// 공격 기능 구현
public class Attackable {
    String name; //무기 이름
    int damage; //무기의 데미지

    //생성자 만들기
    Attackable(String name, int damage){
        this.name = name;
        this.damage = damage;
    }

    //공격 메소드 
    //공격한 무기와 공격시 데미지를 출력
    public void attack(){
        //해당 무기 클래스를 만든다음 상속해서 처리하기
        System.out.println(name + "(으)로 공격합니다.");
        System.out.println(damage + "의 데미지를 받았습니다."); 
    }
}

4.Attackable클래스를 상속받는 Gun클래스 구현

//Attackable 클래스를 상속받는 gun클래스 정의
public class Gun extends Attackable{
    Gun(String name, int dagame){
        super(name, dagame);
    }

    @Override
    public void attack() {
        super.attack();
        System.out.println("빵! 크르르 칵칵!");
    }
}

5.Attackable클래스를 상속받는 OneHandSword클래스 구현

public class OneHandSword extends Attackable{
     OneHandSword(String name, int damage){
        super(name, damage);
    }
    @Override
    public void attack() {
        // TODO Auto-generated method stub
        super.attack();
        System.err.println("서걱서걱서걱서걱!!");
    }
}

6.Attackable클래스를 상속받는 Magic클래스 구현

public class Magic extends Attackable {
    Magic(String name, int damage){
        super(name, damage);
    }

    @Override
    public void attack(){
        //부모클래스의 attack 메소드를 상속
        super.attack();
        //자식클래스에서 사용할 기능 구현
        System.out.println("에너지볼트!!");
    }
}

7. 실행결과

profile
개발자로 취업하기

0개의 댓글