IT/Programming / / 2023. 4. 21. 17:28

[JAVA] polymorphism(다형성), up&down casting 사용 예제

반응형
package dayday12;
/**
 * 
 * @author Administrator
 *	<다형성> (polymorphism)
 *	- 형태가 다양하게 변할 수 있는 성질
 *  - 레퍼런스 형변환
 *    ex) a -> b or c
 *    
 *    
 *  -Up casting : 자식 타입을 부모 타입으로 \ 자동 형변환 가능
 *  -Down casting : 부모타입을 자식으로 자동 형변환 불가
 *  
 *  
 *  
 *  -> 다형성이 왜 좋은가?
 *  1. 배열이나 컬렉션에 다양한 형태의 객체(레퍼런스)가 들어갈 수 있음
 *  2. 매개변수에 다양한 타입의 객체(레퍼런스)가 들어갈 수 있음
 *
 *  주의점
 *  - 부모타입으로 자식 객체를 받아올 경우, 딱 부모 모양만 인식됨
 *  -> 부모가 상속한 멤버 변수나 메소드(오버라이드 메소드포함)만 사용 가능하다
 *  
 *  -> 자식이 가진 고유의 멤버에는 접근 불가
 */
class Pokemon{
	String name;
	int hp, attack;
	void move(){
		System.out.println("포켓몬 이동");
	}
	void fight(Pokemon enemy){
		System.out.println("전투 시작");
		System.out.println(enemy.name+"에게 공격!");
		enemy.hp -= attack;
		System.out.println("적의 남은 체력 : " + enemy.hp);
	}
}
class Pikachu extends Pokemon{
	Pikachu(){
		name = "피카츄";
		hp = 200;
		attack = 20;
	}
	@Override
	void move(){
		System.out.println("피카츄 전속력 이동");
	}
//	@Override
////	void fight(){
////		System.out.println("피카츄 100만 볼트 공격");
////	}
}
class Raichu extends Pokemon{
	Raichu(){
		name = "라이츄";
		hp = 200;
		attack = 20;
	}
	@Override
	void move(){
		System.out.println("라이츄 전속력 이동");
	}
//	void fight(){
//		System.out.println("라이츄 1000만 볼트 공격");
//	}
}
class Pairi extends Pokemon{
	Pairi(){
		name = "파이리";
		hp = 200;
		attack = 20;
	}
	String skill = "불꽃";
	@Override
	void move(){
		System.out.println("파이리 전속력 이동");
	}

//	void fight(){
//		System.out.println("파이리 불꽃 공격");
//	}
}
public class test02 {
	public static void main(String[] args) {
		Pokemon p; //부모타입 객체에 자식타입이 들어간다.
		Pokemon p2 = new Pairi();
		p = new Pikachu(); p.move(); p.fight(p2);
		//System.out.println(p2.skill);//왜 안댐?
									 //.연산자가 먼저 실행됨 -> (Pairi)p2.skill -> String을 Pairi형으로 바꾸겟다? x
									//((Pairi)p2).skill 해야 Pairi의 변수에 접근 가능 다운캐스팅.
		System.out.println(((Pairi)p2).skill);
//		p = new Raichu();  p.move(); p.fight();
//		p = new Pairi();   p.move(); p.fight();
	}
}
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유