- 다형성을 사용하여 메소드를 호출할 때, 발생하는 현상이다.
- 프로그램이 진행(즉, Runtime) 되면서 객체의 동작이 정해지는 것 <=> 정적바인딩( 컴파일 될 때 )
- 실제 참조하는 객체는 서브 클래스이니 서브 클래스의 메소드를 호출한다.
package class01;
// [동적바인딩] = 맨 아래 라인 참조
class Point{
int x;
int y;
void move(int x,int y) {
this.x=x;
this.y=y;
System.out.println("변경 완료!");
}
Point(){
this(0,0);
}
Point(int x, int y){
this.x=x;
this.y=y;
}
@Override
public String toString() {
return "("+this.x+","+this.y+")";
}
}
class ColorPoint extends Point{
String color;
void move(String color,int x, int y) { // 오버로딩
this.color=color;
super.move(x,y);
}
ColorPoint(){
this("검정",0,0);
}
ColorPoint(String color){
this(color,0,0);
}
ColorPoint(int x,int y){
this("검정",x,y);
}
ColorPoint(String color,int x, int y){
super(x,y);
this.color=color;
}
@Override
public String toString() {
return this.color+"("+this.x+","+this.y+")";
}
}
public class Test01 {
public static void main(String[] args) {
Point[] data=new Point[5];
data[0]=new Point(10,20);
data[1]=new ColorPoint();
data[2]=new ColorPoint(10,20);
data[3]=new ColorPoint("빨강");
data[4]=new ColorPoint("파랑",-1,-2);
for (int i = 0; i < data.length; i++) {
System.out.println(data[i].toString());
}
}
}
1. 실제로 저장된 객체는 ColorPoint임에도 불구하고
Point[]로 선언해두었기 때문에
.toString()이 Point 것이라고 안내하고 있다.
data[i]. << 찍어보면 뜸
2. 그런데! Point것이라고 안내해놓고
ColorPoint 것을 호출하여 사용하고있다?!
3. 메서드를 호출하여 사용할 때 -> ★자기자신 영역을 먼저 확인하고★
이후에 부모 영역을 확인하기 때문이다.!
만약에 자식영역에 toString이 없으면 부모껄 쓰기 때문에 문자열은 출력이 안되고
숫자만 출력될 것
4. 이러한 현상을 "동적 바인딩" == 다형성이 구현,실현되었다.
'개발자노트' 카테고리의 다른 글
클래스) 추상메서드 (0) | 2022.06.22 |
---|---|
클래스) 추상클래스 (0) | 2022.06.22 |
클래스) 상속.. 포켓몬 예제 + 기능 모듈화 (0) | 2022.06.22 |
클래스) 상속..오버라이딩, toString 응용예제(포켓몬) (0) | 2022.06.21 |
클래스) 상속..오버라이딩,다운캐스팅 응용예제(카드사용) (0) | 2022.06.21 |