프로그래밍

[자바 기초] day09 : 상속 예제 본문

자바/자바 기초

[자바 기초] day09 : 상속 예제

시케 2023. 5. 16. 17:47
728x90
반응형

2023.05.15.월

포켓몬 클래스 
   이름
   경험치
   레벨
   게임()
      50% 게임성공
      성공: 경험치+10~50 랜덤상승
      실패: 경험치+10 상승
   대화()
   상태출력()
      ㅁㅁㅁ는 Lv.ㅁ [__/100]
피카츄 클래스
   게임()
      100% 게임성공
   대화()
      피카피카
파이리 클래스
   게임()
      20% 게임성공
       -> 1~5 : 1 나오면 성공
   대화()
      파이파이
main()에서
   피카츄 2마리
   파이리 1마리 생성
   게임을 각각 10번씩 시켜서 결과 출력

 

포켓몬 예제)

package class04;

import java.util.Random;

// 포켓몬 클래스
class Pokemon {
	static Random rand = new Random(); 

	String name;
	int lv;
	int exp;
	String voice;

	Pokemon() { // 이름 지정하지 않는 경우 디폴트로 "포켓몬"
		this.name = "포켓몬";
		this.lv = 5; // 디폴트 레벨 5
		this.exp = 0; // 디폴트 경험치 0
		this.voice = "포켓몬";

	}

	Pokemon(String name) { // 이름 사용자 지정
		this(name, 5, 0);

	}

	Pokemon(String name, int lv, int exp) { // 이름, 레벨, 경험치 사용자가 입력
		this.name = name;
		this.lv = lv;
		this.exp = exp;
		this.voice = "포켓몬";

	}

	// 게임 확률 50퍼
	void game() {
		int win = rand.nextInt(2);

		win(win);
		levelUp();
	}

	// 대화 메서드
	void talk() {
		System.out.println(this.name + ": "+this.voice);
	}

	// 정보 출력 메서드
	void printInfo() {
		System.out.println(this.name + "는 LV." + this.lv + "[" + this.exp + "/100]");
	}

	void win(int win) {
		
		if (win == 0) {
			this.exp += rand.nextInt(40) + 10;
			System.out.println(this.name+" 성공!");
		} else {
			this.exp += 10;
			System.out.println(this.name+" 실패...");
		}
	}

	void levelUp() {
		while (this.exp >= 100) {
			this.lv++;
			this.exp -= 100;
			System.out.println(this.name + " 레벨업!");
		}
	}

}

// 피카츄 포켓몬 상속
class Pika extends Pokemon {

	// 기본 생성자
	Pika() {
		this(5, 0);
	}

	// 이름만 입력
	Pika(String name) {
		this(name, 5, 0);
	}
	
	Pika(int lv){
		super("피카츄");
		this.lv = lv;
	}

	// 레벨, 경험치 입력 받았을때
	Pika(int lv, int exp) {
		super("피카츄");
		this.lv = lv;
		this.exp = exp;
	}

	Pika(String name, int lv, int exp) {
		this.name = name;
		this.lv = lv;
		this.exp = exp;
	}

	// 게임 확률 100퍼 오버라이딩
	void game() {

		int win = rand.nextInt(1);

		win(win);
		levelUp();

	}

	// 대화 오버라이딩
	void talk() {
		System.out.println(this.name + ": 피카피카");
	}

	void printInfo() {
		System.out.println(this.name + "는 LV." + this.lv + "[" + this.exp + "/100]");
	}
}

// 파이리 클래스 상속
class Fire extends Pokemon {

	// 기본 생성자
	Fire() {
		this(5, 0);
	}

	// 이름만 입력
	Fire(String name) {
		this(name, 5, 0);
	}
	
	Fire(int lv){
		super("파이리");
		this.lv = lv;
	}

	// 파이리 경험치, 레벨 입력
	Fire(int lv, int exp) {
		this("파이리", lv, exp);
	}

	// 전부 다 입력
	Fire(String name, int lv, int exp) {
		this.name = name;
		this.lv = lv;
		this.exp = exp;

	}

	// 게임확률 20퍼 오버라이딩
	void game() {
		int win = rand.nextInt(5);

		win(win);
		levelUp();
	}

	// 대화 오버라이딩
	void talk() {
		System.out.println(this.name + ": 파이파이");
	}

	// 정보 출력 오버라이딩
	void printInfo() {
		System.out.println(this.name + "는 LV." + this.lv + "[" + this.exp + "/100]");
	}
}

public class Test02 {

	public static void main(String[] args) {

		Pika p1 = new Pika(3, 23);
		Pika p2 = new Pika();

		Fire f1 = new Fire("파이리1", 36, 99);

		for (int i = 0; i < 10; i++) {
			p1.game();
			p2.game();
			f1.game();
		}

		p1.talk();
		p2.talk();
		f1.talk();

		p1.printInfo();
		p2.printInfo();
		f1.printInfo();
	}

}

 

[ 연습 문제 ]

 

 

클래스 구현하기
 1) 멤버변수 3개이상
   클래스변수는 포함 여부는 상관없다
 2) 메서드 2개이상
   오버라이딩 1개포함해서 메서드 2개이상
 3) 생성자 오버로딩 사용
   this 활용
   super 활용

main()에서 부모클래스 객체 1개,
   자식클래스 객체 2개 생성하여 사용

+) 객체배열 활용

 

예제)

package class04;

import java.util.Random;

class Animal{ // 동물 클래스
	String name; 	//동물 이름
	int age; 		//동물 나이
	int playTime; 	// 놀아준 시간

	Animal(){ // 이름, 나이 생성 안했을때
		this("동물", 1);
	}
	
	Animal(int age){
		this("동물", age);                              
	}
	
	Animal(String name, int age){ // 이름, 나이 지정 가능
		this.name =name;
		this.age = age;
		this.playTime = 0; // 무조건 0분
	}
	
	void addAge() { // 나이 1씩 증가
		this.age++;
		System.out.println(this.name +"은/는 나이를 한살 더 먹었습니다");
		System.out.println("나이: "+this.age);
	}
	
	void play(int playTime) { // 사용자에게서 입력받은만큼 놀이 시간 추가
		this.playTime+=playTime;
		System.out.println(this.name+"은/는 "+this.playTime+"분 놀았습니다");
	}
		
}

//강아지 클래스 동물 클래스 상속
class Dog extends Animal{
	
	Dog(){ // 기본값 강아지, 1살
		super("강아지", 1);
	}
	
	Dog(int age){ //사용자가 나이 입력
		super("강아지", age);
	}
	
	Dog(String name, int age){ // 사용자가 이름, 나이 입력
		this.name = name;
		this.age = age;
	}
	
	void play(int playTime) { // 산책으로 오버라이딩
		this.playTime+=playTime;
		System.out.println(this.name+"은/는 산책을 "+this.playTime+"분 했습니다");
	}
}

// 고양이 클래스 동물 클래스 상속
class Cat extends Animal{
	
	Cat(){ // 기본값 나이 1
		this("고양이",1);
	}
	
	Cat(int age){ // 사용자가 나이 입력
		super("고양이",age);
	}
	
	Cat(String name, int age){ // 사용자가 이름, 나이 입력
		this.name = name;
		this.age = age;
	}
	
	void play(int playTime) { // 낚시 놀이로 오버라이딩
		this.playTime+=playTime;
		System.out.println(this.name+"은/는 낚시 놀이를 "+this.playTime+"분 했습니다");
	}
	
	
}

public class Test03 {
	
	public static void main(String[] args) {
		Random rand = new Random();
		
		Dog[] dogData = new Dog[3]; //객체 배열 강아지 최ㅐ 3마리
		
		dogData[0] = new Dog();
		dogData[1] = new Dog("구름", 4);
		dogData[2] = new Dog(9);
	
		Animal a1 = new Animal();
		Cat c1 = new Cat(2);
		
		a1.addAge();
		a1.play(10);
		System.out.println();
		
		c1.addAge();
		c1.play(60);
		System.out.println();
		
		for(int i=0; i<dogData.length; i++) {
			dogData[i].addAge();
			dogData[i].play(rand.nextInt(91)+10); //10~ 100분 사이로 놀아준다
			System.out.println();
		}
		
		
	}
}
728x90
반응형
Comments