한 번에 끝내는 Java/Spring 웹 개발 마스터
- 추상 클래스
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();
}
}
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("****** 초급자 레벨입니다. ******");
}
}
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("****** 중급자 레벨입니다. ******");
}
}
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("****** 고급자 레벨입니다. ******");
}
}
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("****** 숙련자 레벨입니다. ******");
}
}
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);
}
}
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하는 문제였는데 재미있었다.