본문 바로가기

국비교육/국비교육 복습

day12_oop.inherit8 : 추상 클래스(abstract class)와 추상 메소드(abstract method)

다음 요구사항에 맞게 클래스 구조 구현 및 객체 생성 후 기능 실행해보세요

요구사항

  • 전사(warrior) 클래스
    • 아이디를 저장할 수 있어야 합니다
    • 레벨을 저장할 수 있어야 합니다(1이상 설정 가능)
    • 생성 시 아이디만 설정 가능합니다(레벨은 1로 설정)
    • 공격 기능이 있어야 합니다("전사가 칼로 공격합니다!" 출력)
    • 이동 기능이 있어야 합니다("전사가 뛰어서 이동합니다!" 출력)
    • 정보 출력 기능이 있어야 합니다(아이디와 레벨을 출력)
  • 마법사(magician) 클래스
    • 아이디를 저장할 수 있어야 합니다
    • 레벨을 저장할 수 있어야 합니다(1이상 설정 가능)
    • 생성 시 아이디만 설정 가능합니다(레벨은 1로 설정)
    • 공격 기능이 있어야 합니다("마법사가 마법으로 공격합니다!" 출력)
    • 이동 기능이 있어야 합니다("마법사가 날아서 이동합니다!" 출력)
    • 정보 출력 기능이 있어야 합니다(아이디와 레벨을 출력)
  • 엘프(elf) 클래스
    • 아이디를 저장할 수 있어야 합니다
    • 레벨을 저장할 수 있어야 합니다(1이상 설정 가능)
    • 생성 시 아이디만 설정 가능합니다(레벨은 1로 설정)
    • 공격 기능이 있어야 합니다("엘프가 활로 공격합니다!" 출력)
    • 이동 기능이 있어야 합니다("엘프가 이동합니다!" 출력)
    • 정보 출력 기능이 있어야 합니다(아이디와 레벨을 출력)

 

Player 클래스 (슈퍼 클래스 + 추상 클래스)

package day12_oop.inherit8;

public abstract class Player {

	// 멤버 필드
	protected String id;
	protected int lv;

	// getter & setter
	public String getId() {
		return this.id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public int getLv() {
		return this.lv;
	}

	public void setLv(int lv) {
		if(lv <= 0) {
			return;
		}
		this.lv = lv;
	}

	// 생성자
	public Player(String id) {
		this(id, 1);
		//this.id = id;
		//this.setLv(1);
	}

	public Player(String id, int lv) {
		this.setId(id);
		this.setLv(lv);
	}

	// 메소드
	public void information() {
		System.out.println("아이디 : " + this.id);
		System.out.println("레벨 : " + this.lv);
	}

	// 추상 메소드
	public abstract void attack();
	public abstract void move();
}

 

Warrior 클래스

package day12_oop.inherit8;

public class Warrior extends Player {

	// 멤버 필드

	// 생성자
	public Warrior(String id) {
		super(id);
	}

	// 추상메소드 오버라이딩
	@Override
	public void attack() {
		System.out.println("전사가 칼로 공격합니다!");
	}

	@Override
	public void move() {
		System.out.println("전사가 뛰어서 이동합니다!");
	}
}

 

Magician 클래스

package day12_oop.inherit8;

public class Magician extends Player {

	// 멤버 필드

	// 생성자
	public Magician(String id) {
		super(id);
	}

	// 추상메소드 오버라이딩
	@Override
	public void attack() {
		System.out.println("마법사가 마법으로 공격합니다!");
	}

	@Override
	public void move() {
		System.out.println("마법사가 날아서 이동합니다!");
	}
}

 

Elf 클래스

package day12_oop.inherit8;

public class Elf extends Player {

	// 멤버 필드

	// 생성자
	public Elf(String id) {
		super(id);
	}

	// 추상메소드 오버라이딩
	@Override
	public void attack() {
		System.out.println("엘프가 활로 공격합니다!");
	}

	@Override
	public void move() {
		System.out.println("엘프가 이동합니다!");
	}
}

 

메인 메소드

package day12_oop.inherit8;

public class Test01 {

	public static void main(String[] args) {

		// 객체 생성
		Warrior a = new Warrior("전사");
		Magician b = new Magician("마법사");
		Elf c = new Elf("엘프");

		// 메소드 출력
		a.information();
		a.attack();
		a.move();

		b.information();
		b.attack();
		b.move();

		c.information();
		c.attack();
		c.move();
	}
}