추상 클래스 (abstract class)

이진석·2022년 8월 11일
1
post-thumbnail

20220811

한 번에 끝내는 Java/Spring 웹 개발 마스터

  • 추상 클래스

1) 추상클래스

public abstract class PlayerLevel {
	public abstract void run();
	public abstract void jump();
	public abstract void turn();	
	public abstract void showLevelMessage();

	final public void go(int count) {
		run();
		
		for(int i=0; i<count; i++) {
			jump();
		}
		turn();
	}
}

2) PlayerLevel 클래스를 상속받는 BeginnerLevel

public class BeginnerLevel extends PlayerLevel {

	@Override
	public void run() {
		
		System.out.println("천천히 달립니다.");
	}

	@Override
	public void jump() {

		System.out.println("jump 못합니다.");
	}

	@Override
	public void turn() {

		System.out.println("turn 못합니다.");
	}

	@Override
	public void showLevelMessage() {

		System.out.println("****** 초급자 레벨입니다. ******");
	}
}

3) PlayerLevel 클래스를 상속받는 AdvancedLevel

public class AdvancedLevel extends PlayerLevel {

	public void run() {
		
		System.out.println("빨리 달립니다.");
	}

	@Override
	public void jump() {

		System.out.println("높이 jump 합니다.");
	}

	@Override
	public void turn() {

		System.out.println("turn 못합니다.");
	}

	@Override
	public void showLevelMessage() {

		System.out.println("****** 중급자 레벨입니다. ******");
	}
}

4) PlayerLevel을 상속받는 SuperLevel

public class SuperLevel extends PlayerLevel {

	public void run() {
		
		System.out.println("엄청 빠르게 달립니다.");
	}

	@Override
	public void jump() {

		System.out.println("아주 높이 jump 합니다.");
	}

	@Override
	public void turn() {

		System.out.println("turn 합니다.");
	}

	@Override
	public void showLevelMessage() {

		System.out.println("****** 고급자 레벨입니다. ******");
	}
}

5) PlayerLevel 클래스를 상속받는 UltraLevel

public class UltraSuperLevel extends PlayerLevel {

	public void run() {
		
		System.out.println("매우 엄청 빠르게 달립니다.");
	}

	@Override
	public void jump() {

		System.out.println("아주 매우 높이 jump 합니다.");
	}

	@Override
	public void turn() {

		System.out.println("turn 을 잘 합니다.");
	}

	@Override
	public void showLevelMessage() {

		System.out.println("****** 숙련자 레벨입니다. ******");
	}
}

5) PlayerLevel들을 가지고 있는 Player클래스

public class Player {
	
	private PlayerLevel level;
	
	public Player() {
		level = new BeginnerLevel();
		level.showLevelMessage();
	}

	public PlayerLevel getLevel() {
		return level;
	}

	public void upgradeLevel(PlayerLevel level) {
		this.level = level;
		level.showLevelMessage();
	}
	
	public void play(int count) {
		level.go(count);
	}
}

6) 출력

public class MainBoardPlay {
	public static void main(String[] args) {
		
		Player player = new Player();
		player.play(1);
		
		AdvancedLevel aLevel = new AdvancedLevel();
		player.upgradeLevel(aLevel);
		player.play(2);
		
		SuperLevel sLevel = new SuperLevel();
		player.upgradeLevel(sLevel);
		player.play(3);
		
		UltraSuperLevel uLevel = new UltraSuperLevel();
		player.upgradeLevel(uLevel);
		player.play(4);
	}
}

"한 번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online."

  • 추상 클래스 (abstract class)를 이용해서 만드는 문제였다.

  • level마다 클래스를 나누어서 playerlevel클래스를 상속받아서 각기 다른 출력결과를 입력해주었고, Player클래스는 한 번에 하나의 레벨 상태만을 가질 수 있으므로, 처음에 BeginnerLevel로 시작해서 UpgradeLevel을 통해서 점차 레벨을 올려나가는 과정으로 설정해서 문제를 해결했다.

  • count횟수만큼 jump하고 turn하는 문제였는데 재미있었다.

profile
혼자서 코딩 공부하는 전공생 초보 백엔드 개발자 / https://github.com/leejinseok0614

0개의 댓글