Polymorphism(다형성)
2023. 7. 13. 12:50ㆍJAVA
public class First {
int a;
void showFirst() {
System.out.println("show First...");
}
void show() {
System.out.println("Frist클래스의 show()메소드");
}
}
public class Second extends First{
int b;
void showSecond() {
System.out.println("show Second..");
}
//override
void show() {
System.out.println("Second클래스의 show메소드..");
}
}
public class Third extends Second{
@Override
void show() {
System.out.println("Third클래스의 show메소드....");
}
}
public class Test extends First{
@Override
void show() {
// TODO Auto-generated method stub
System.out.println("Test클래스의 show메소드...");
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
First f=new First(); //제대로 된 casting = 참조변수가 제대로된 객체를 잡는것
Second s=new Second();
// 다른 class의 캐스팅은 안 되는 것이 정상
// 하지만, 상속관계라면 ...
// 부모클래스의 참조변수로 자식객체를 참조할 수 있음.
f= new Second(); // Up casting
//자식클래스의 참조변수로는 부모객체를 참조할 수 없음.
//s= new First(); //error -- Down casting..
//업캐스팅을 하면 부모의 기능은 사용할 수 있지만
//자식객체의 고유 기능들은 사용이 불가능.
f.a= 10;
f.showFirst();
//f.b= 20; //error
//f.showSecond(); //error
//그럼에도 자식의 고유기능을 사용하고 싶다면?
//방법없음. 새로운 자식 참조변수가 필요함.
Second s2;
//f참조변수가 참조하고 있는 Second객체의 주소를 s2에 대입해주기
s2=(Second)f; //명시적 형변환 : Down casting
s2.b=20;
s2.showSecond();
First f2= new First(); //제대로 된 캐스팅
Second s3;
//s3=(Second)f2; //error- 무조건 명시적 형변환 한다고 실제 객체가 변경되는 것은 아님.
다운캐스팅은 업캐스팅이 이루어진것만 가능
Second s4= new Second();
s4.show();
First f3= new First();
f3.show();
First f4= new Second();
f4.show(); //실제 참조하고 있는 Second 객체의 오버라이드된 show가 발동함
// 이 기능이 어떤 유용한 점이 있는가??
//업 캐스팅을 사용하는 이유 여러개...중
//1. 부모참조변수 1개로 여러 자식객체들을 제어 가능
First obj;
obj= new First();
obj.show();
obj= new Second();
obj.show();
//First를 상속한 Test클래스
obj= new Test();
obj.show();
//Second를 상속한 Third클래스
obj= new Third();
obj.show();
//위처럼 obj.show()라는 똑같은 모양의 코드명령에
//다른 기능으로 동작되는 특징을 [다형성 Polymorphism] 이라고 부름
//다형성의 효용성이 보여지는 예제 실습.. 다음프로젝트로..
}
}
'JAVA' 카테고리의 다른 글
| Abstract (0) | 2023.07.14 |
|---|---|
| Polymorphism(다형성)예제 (0) | 2023.07.13 |
| Final (0) | 2023.07.13 |
| Inheritance(상속)예제 (0) | 2023.07.12 |
| Inheritance(상속) (0) | 2023.07.12 |