반응형
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();
}
}
반응형
'IT > Programming' 카테고리의 다른 글
[JAVA] abstract class(추상클래스) 사용 예제 (0) | 2023.04.21 |
---|---|
[JAVA] interface(인터페이스) 사용 예제 (0) | 2023.04.21 |
[JAVA] Abstract class를 사용한 미니게임[탱크vs스나이퍼] 예제 (0) | 2023.04.20 |
[JAVA] instanceof 연산자 사용 예제 (0) | 2023.04.20 |
[JAVA] java.lang package class 사용 예제 (0) | 2023.04.20 |