22.11.25_모각코 6회차

2022. 11. 30. 21:01모각코

목표

- 객체지향프로그래밍 과제 10문제 풀기(과제 10)

내용

4. Monster 클래스 구현하기

 
 

문제 설명

클래스 (Weapon, Monster, Slime, Goblin, Dragon)와 인터페이스 Flyable를 조건에 맞게 구현 하세요.

접근 지정자는 특별한 언급이 없다면 public 으로 설정해 주세요.

Weapon 클래스

멤버변수

아래와 같은 멤버변수를 가지며, 접근 지정자는 private으로 설정 합니다.

  • int타입의 weaponPower

생성자

  • Weapon(int weaponPower) //입력인자 값으로 멤버변수 weaponPower 값을 초기화 합니다.
  • Weapon() // weaponPower의 값을 0으로 초기화 합니다.

멤버함수

  • getWeaponPower() // 멤버변수 weaponPower의 값을 리턴 합니다.
  • setWeaponPower(int weaponPower) //입력 값으로 멤버 변수weaponPower의 값을 변경합니다.

Monster 클래스

추상클래스로 구현 합니다.

멤버변수

아래와 같은 멤버 변수를 가지며, 접근 지정자는 protected 로 설정 합니다.

  • int 타입의 hp
  • int 타입의 monsterPower

생성자

Monster(int hp, int monsterPower) // 입력인자 값으로 멤버 변수들의 값을 초기화 합니다.
Monster() // 멤버변수의 값을 모두 0으로 초기화 합니다.

멤버함수

  • getHp() // 멤버변수 hp의 값을 리턴 합니다.
  • setHp(int hp) //입력 값으로 멤버변수 hp의 값을 변경합니다.
  • getMonsterPower() // 멤버변수 monsterPower의 값을 리턴 합니다.
  • setMonsterPower(int monsterPower) //입력 값으로 멤버변수 monsterPower의 값을 변경합니다.
  • getAttacked(int damage) //리턴 값이 없으며, 입력인자 값(damage)을 멤버변수 hp 에서 빼는 메소드 입니다.
  • attackDamage() // 리턴형이 int인 추상 메소드 를 선언 합니다.

Slime 클래스

추상 클래스 Monster를 상속 받습니다.

멤버변수

상속 받은 것 외에는 추가적인 멤버 변수가 없습니다.

생성자

  • Slime(int hp, int monsterPower) // 입력값으로 멤버변수 hp, monsterPower의 값을 초기화 합니다.
  • Slime() // 멤버변수 값을 모두 0으로 초기화 합니다.

멤버함수

  • 상속받은 추상 메소드 attackDamage() 구현 // 멤버 변수 monsterPower의 값을 그대로 리턴 하도록 구현합니다.

Goblin 클래스

추상클래스 Monster를 상속 받습니다.

멤버변수

다음과 같은 멤버변수를 추가로 가지며, 접근 지정자는 private으로 설정합니다.

  • Weapon 타입의 weapon

생성자

  • Goblin(int hp, int monsterPower, Weapon weapon) // 멤버변수를 입력 인자를 가지고 초기화 해줍니다.
  • Goblin() // 멤버변수 hp, monsterPower의 값은 0으로 초기화 해줍니다. 그리고 멤버변수 weapon은 Weapon 클래스의 기본생성자로 만든 객체로 초기화 해줍니다.

멤버함수

  • getWeapon() // 멤버변수 weapon을 리턴합니다.
  • setWeapon(Weapon weapon) // 멤버변수 weapon을 입력 받은 객체 weapon로 바꿔줍니다.
  • 추상메소드 attackDamage() 구현하기 // 멤버변수 monsterPower의 값과, 멤버변수 weapon이 가진 멤버변수 weaponPower의 값을 더하여 리턴합니다.

Flyable 인터페이스

아래의 추상메소드 들을 선언합니다.

  • fly() //리턴 하지 않는 메소드 입니다.
  • setIsFlying(boolean isFlying) //리턴 하지 않는 메소드 입니다.
  • getIsFlying() //boolean값을 리턴 하는 메소드 입니다.

Dragon 클래스

추상클래스 Monster를 상속 받으며, 인터페이스 Flyable을 구현 합니다.

멤버변수

다음과 같은 멤버변수를 추가로 가지며, 접근 지정자는 private으로 설정합니다.

  • boolean 타입의 isFlying

생성자

  • Dragon(int hp, int monsterPower, boolean isFlying) // 입력받은 값으로 멤버변수들의 값을 초기화 해줍니다.
  • Dragon() //멤버변수 hp, monsterPower의 값을 0으로 초기화 해주고 isFlying 의 값을 false로 초기화 해주세요.

멤버함수

상속받은 추상 메소드들을 모두 다음 조건에 맞게 구현 합니다.

  • getIsFlying() // 멤버변수 isFlying의 값을 리턴합니다.
  • setIsFlying(boolean isFlying) //입력받은 값으로 멤버변수 isFlying의 값을 변경합니다.
  • fly() // isFlying의 값을 true로 변경합니다.
  • 추상메소드 attackDamage() 구현하기 // isFlying의 값이 true일 때는, monsterPower의 값을 2배 하여 리턴 해주며, 그렇지 않으면 monsterPower의 값을 그대로 리턴 하도록 구현 합니다.
//아래 코드를 조건에 맞게 구현 하세요, 필요시 코드를 수정 해야 합니다.
class Weapon{
    private int weaponPower;
    Weapon(int weaponPower) {
        this.weaponPower = weaponPower;
    }
    Weapon() {
        this(0);
    }
    int getWeaponPower() {
        return weaponPower;
    }
    void setWeaponPower(int weaponPower) {
        this.weaponPower = weaponPower;
    }
}
abstract class Monster{
    protected int hp, monsterPower;
    Monster(int hp, int monsterPower) {
        this.hp = hp;
        this.monsterPower = monsterPower;
    }
    Monster() {
        this(0, 0);
    }
    int getHp() {
        return hp;
    }
    void setHp(int hp) {
        this.hp = hp;
    }
    int getMonsterPower() {
        return monsterPower;
    }
    void setMonsterPower(int monsterPower) {
        this.monsterPower = monsterPower;
    }
    void getAttacked(int damage) {
        hp -= damage;
    }
    public abstract int attackDamage();
}
class Slime extends Monster {
    Slime(int hp, int monsterPower) {
        super(hp, monsterPower);
    }
    Slime() {
        super();
    }
    public int attackDamage() {
        return monsterPower;
    }
}
class Goblin extends Monster {
    private Weapon weapon;
    Goblin(int hp, int monsterPower, Weapon weapon) {
        super(hp, monsterPower);
        this.weapon = weapon;
    }
    Goblin() {
        super();
        weapon = new Weapon();
    }
    Weapon getWeapon() {
        return weapon;
    }
    void setWeapon(Weapon weapon) {
        this.weapon = weapon;
    }
    public int attackDamage() {
        return monsterPower + weapon.getWeaponPower();
    }
}
interface Flyable{
    abstract void fly();
    abstract void setIsFlying(boolean isFlying);
    abstract boolean getIsFlying();
}
class Dragon extends Monster implements Flyable{
    private boolean isFlying;
    Dragon(int hp, int monsterPower, boolean isFlying) {
        super(hp, monsterPower);
        this.isFlying = isFlying;
    }
    Dragon() {
        super();
        isFlying = false;
    }
    public boolean getIsFlying() {
        return isFlying;
    }
    public void setIsFlying(boolean isFlying) {
        this.isFlying = isFlying;
    }
    public void fly() {
        isFlying = true;
    }
    public int attackDamage() {
        if (isFlying) {
            return monsterPower * 2;
        } else {
            return monsterPower;
        }
    }
}

//아래 코드는 수정하지 마세요.
class Solution {
    public int solution(int ignore) {
        int answer = 0;
        return answer;
    }
}

회고

- 배운 추상 메소드와 인터페이스를 직접 작성해 볼 수 있었다.

'모각코' 카테고리의 다른 글

22.11.18_모각코 5회차  (0) 2022.11.30
22.11.11_모각코 4회차  (0) 2022.11.30
22.11.04_모각코 3회차  (0) 2022.11.07
22.10.07_모각코 2회차  (0) 2022.10.10
22.09.30_모각코 1회차  (1) 2022.09.30