JAVA를 잡아라!...

JAVA_상속_#2_포켓몬 본문

JAVA/JAVA_복습문제

JAVA_상속_#2_포켓몬

onivv 2023. 12. 3. 20:46

문제

 

▶ 포켓몬 클래스 형성 (상위 클래스)

     < 멤버변수 >

      - 반드시 타입을 가짐
      - 레벨 설정 안했다면 5
      - 경험치는 항상 0
      - 이름 설정 안했다면 "포켓몬"
      < 메소드 >
      - 공격() : 어떤 타입인지에 따라 달라짐
      - 인사() : 어떤 포켓몬인지에 따라 달라짐

            ▶ 전기타입 (하위 클래스) : 공격() ---> 백만볼트
                                              ▶ 피카츄 (하위 클래스) : 인사() ---> 피카피카
            ▶ 물타입 (하위 클래스) : 공격() ---> 물대포
                                              ▶ 꼬부기 (하위 클래스) : 인사() ---> 꼬북꼬북

 

코드

package inheritance;

class Poke {
	//멤버변수 4가지 선언
	String type;
	int level;
	int exp;
	String name;
	//생성자 형성 : 타입에 강제성을 줌.(반드시 필요)
	Poke(String type){
		this.type = type;
		this.level = 5;
		this.exp = 0;
		this.name = "포켓몬";
	}
	//메소드 선언 : 아직 구현하진 않지만 하위 클래스에서 사용 예정
	//하위 클래스에서 오버라이딩하면 아래 문구는 출력 x!
	void attack(){
		System.out.println("[로그 1.]");
		System.out.println("포켓몬 클래스의 attack() - 아직 구현 x");
	}
	void hello(){
		System.out.println("[로그 2.]");
		System.out.println("포켓몬 클래스의 hello() - 아직 구현 x");
	}
}

//포켓몬을 상속받는 전기타입 형성
class Elecc extends Poke {
	//생성자 : 타입을 무조건 받아오기위해????
	Elecc(){
		//Poke(String type) //String이 1개 들어있는 부모 생성자
		super("전기타입");
	}
	//공격() 메소드 어노테이션
	@Override
	void attack() {
		System.out.println(this.name + " 백만볼트----------");
	}
}
//포켓몬을 상속받는 물타입 형성
class Waterr extends Poke {
	//생성자 : 타입을 무조건 받아오기위해????
	Waterr(){
		super("물타입");
	}
	//공격() 메소드 어노테이션
	@Override
	void attack() {
		System.out.println(this.name + " 물대포----------");
	}
}
//포켓몬을 상속받는 피카츄
class Pika extends Elecc{
	Pika(){
		this("피카츄");
		//this("피카츄") == Pika("피카츄")
	}
	Pika(String name){
		//super() : Elecc() //Elecc의 기본 생성자가 숨어있음
		//이름만 저장하는 것이 아닌, 나머지 멤버변수는 super()기본 생성자를 통해 저장
		this.name = name;
	}
	//인사() 메소드 어노테이션
	@Override
	void hello() {
		System.out.println("피카피카 (*^___^*)");
	}
}
//포켓몬을 상속받는 꼬부기
class Kobugi extends Waterr{
	Kobugi(){
		this("꼬부기");
	}
	Kobugi(String name){
		this.name = name;
	}
	//인사() 메소드 어노테이션
	@Override
	void hello() {
		System.out.println("꼬북꼬북 (*0___0*)");
	}
}
public class freefree {
	public static void main(String[] args) {
		//Pika() 기본 생성자 메모리에 할당! Pika 클래스에 p1객체 생성!
		Pika p1 = new Pika();
		p1.attack();
		p1.hello();
		Kobugi k1 = new Kobugi();
		k1.attack();
		k1.hello();
	}
}