컴퓨터공학 💻 도서관📚
Part2. 3-16 객체 코딩으로 복습하기 1 본문
추상 클래스와 템플릿 메서드
package ch16.gamelevel;
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(); // final 예약어 사용으로 하위클래스에서 재정의 못 함
for(int i = 0; i<count; i++) { // 굉장히 강력크한 마법
jump();
}
turn();
}
}
package ch16.gamelevel;
public class Player {
private PlayerLevel level; // PlayerLevel 클래스를 참조 자료형으로 사용
public Player(){
level = new BeginnerLevel(); // 형변환
level.showLevelMessage(); // 여기에서 초보자입니다 출력
}
public PlayerLevel getLevel() { // return형이 PlayerLevel
return level; // return 하긷
}
public void upgradeLevel( PlayerLevel level ) {
this.level = level;
level.showLevelMessage(); // 여기서 중급자, 고급자입니다 출력
}
public void play(int count) { // play 메서드에서 go메서드 호출
level.go(count);
}
}
package ch16.gamelevel;
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("****** 초급자 레벨입니다. ******");
}
}
package ch16.gamelevel;
public class AdvancedLevel 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("****** 중급자 레벨입니다. ******");
}
}
package ch16.gamelevel;
public class SuperLevel 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("****** 고급자 레벨입니다. ******");
}
}
package ch16.gamelevel;
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);
}
}
'✅🌲강의 복습 노트 > 패캠 JavaSpring 강의,코드 복습' 카테고리의 다른 글
Part2. 4-1 Object 클래스 - 모든 클래스의 최상위 클래스 (toString 메서드) (0) | 2025.06.17 |
---|---|
Part2. 3-16 객체 코딩으로 복습하기 2 (0) | 2025.06.16 |
Part2. 3-15 여러 인터페이스 구현하기, 인터페이스의 상속 (1) | 2025.06.13 |
Part2. 3-14 인터페이스의 여러가지 요소(상수, 메서드) (1) | 2025.06.12 |
Part2. 3-13 인터페이스를 활용한 다형성 구현 (dao 구현하기) (0) | 2025.06.12 |
Comments