JAVA를 잡아라!...

JAVA_추상클래스_#2_Pokemon 본문

JAVA/JAVA_복습문제

JAVA_추상클래스_#2_Pokemon

onivv 2023. 12. 6. 17:29

문제

//포켓몬 클래스
//전기 클래스
//피카츄 클래스
//라이츄 클래스

main(){
	피카츄 p1 = new 피카츄();	//피카츄 Lv.5
	피카츄 p2 = new 피카츄(11);	//피카츄 Lv.11
	라이츄 p3 = new 라이츄();	//라이츄 Lv.5
	p1.attack();	//백만볼트!
	p3.attack();	//백만볼트!
	p1.hello();	//피카피카
	p3.hello();	//라이라이
}

// 추상 클래스는 몇개일까요?
// 모든 전기 클래스 타입들의 attack()은 백만볼트! 입니다.
// 각각의 포켓몬들은 울음소리가 다릅니다.

 

- 멤버변수(속성) 유추

- 생성자 유추

- 생성자는 멤버변수 초기화하는 역할! 무조건 모든 멤버변수 초기화!

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

 

한글코딩

	abstract class 포켓몬
			String name;
			String type;
			int lv;
			포켓몬() {
				this(5);
			}
			포켓몬(String name, String type, int lv)
				this.name = name; // "포켓몬"에서 결정 X, 하위에서 할거임
				this.type = type; // "포켓몬"에서 결정 X, 하위에서 할거임
				this.lv = lv;
			abstract void attack();
			abstract void hello();
			
	class 전기 extends 포켓몬
			전기(String name){
				this(name, 5);
			}
			전기(String name, int lv){
				super(name, "전기", lv);
			}
			void attack(){
				syso("백만볼트!")
			}
			
	class 피카츄 extends 전기
			피카츄(){
				this(5);
			}
			피카츄(int lv){
				super("피카츄", lv);
			}
			void hello();{
				syso("피카피카")
			}
			
	class 라이츄 extends 전기
			라이츄(){
				this(5);
			}
			라이츄(int lv){
				super("라이츄", lv);
			}
			void hello();{
				syso("라이라이")
			}

 

코드

package class01;

abstract class Pokemon {
	//1. 멤버변수(속성): 포켓몬은 이름, 타입, 레벨을 가짐
	String name;
	String type;
	int lv;
	//2. 생성자: 이름, 타입, 레벨은 하위클래스에서 해줄거야!
	Pokemon(String name, String type, int lv) {
		this.name = name;
		this.type = type;
		this.lv = lv;
	}
	//4. printInfo는 오버라이딩을 강제할필요 X, 모든 포켓몬이 출력하니까!
	void printInfo() {
		System.out.println("이름:" + this.name + ", Lv." + this.lv);
	}
	//3. 추상메소드 생성
	abstract void attack();
	abstract void hello();
}

abstract class Elec extends Pokemon {
	//1. 생성자: 이름, 레벨은 하위클래스에서 해줄거야! (타입 책임지기)
	Elec(String name, int lv) {
		super(name, "전기", lv);
	}
	//2. 메소드오버라이딩 : 강제로 만들게 돼있음. 안만들면 Elec에 빨간밑줄 생김 ㅠㅠ
	@Override
	void attack() {
		System.out.println("백만볼트!");
	}
}

class Pikachu extends Elec {
	//2. 생성자
	Pikachu() {
		this(5);
	}
	//1. 생성자: 레벨만 받아옴 (이름 책임지기)
	Pikachu(int lv) {
		super("피카츄",lv);
	}
	@Override
	void hello() {
		System.out.println("피카피카(0^___^0)");
	}
}

class Liechu extends Elec {
	//2. 생성자
	Liechu() {
		this(5);
	}
	//1. 생성자: 레벨만 받아옴 (이름 책임지기)
	Liechu(int lv) {
		super("라이츄",lv);
	}
	@Override
	void hello() {
		System.out.println("라이라이(**^___^**)");
	}
}

public class Test04 {

	public static void main(String[] args) {
		Pikachu p1 = new Pikachu();
		Pikachu p2 = new Pikachu(10);
		Liechu p3 = new Liechu(13);
		p1.printInfo();
		p1.hello();
		p1.attack();
		p2.printInfo();
		p2.hello();
		p2.attack();
		p3.printInfo();
		p3.hello();
		p3.attack();
	}
	
}

 

출력

이름:피카츄, Lv.5
피카피카(0^___^0)
백만볼트!
이름:피카츄, Lv.10
피카피카(0^___^0)
백만볼트!
이름:라이츄, Lv.13
라이라이(**^___^**)
백만볼트!