보통 개발 할 때 업캐스팅을 많이 사용한다.
인터페이스던 추상클래스던 ....
다형성을 위해서..
아래의 예를 보자.
public class Shape {
public void draw() {
...
}
}
public class Circle extneds Shape {
public void draw() {
...
}
public void myDraw() {
...
}
}
public class Test {
public static void main(String args[]) {
Circle c = new Circle();
c.draw();
c.myDraw();
Shape s;
s = c;
s.draw();
s.myDraw();
}
}
보면
에러가 날까.. 아니면 정상적으로 작동할까..
일반적으로 업캐스팅을 하고나면 , 그냥 아무 생각없이 하위 클래스의 메서드를
쓰게 되는데 내부적으로 봤을때 하위 클래스의 메서드를 사용 할 수 있는 경우는
"그 메서드가 상위 클래스에 존재 할때"
에 하위클래스의 메서드를 사용 할 수 있는 것이다.
만약, 하위클래스에서 오버라이드 하지 않았다면,
상위클래스의 메서드가 호출될 것이다.
오버라이드 했다면 당연히 하위 클래스의 메서드가 호출될 것이지만, 만약 상위 클래스에 없는데 위
경우처럼 s.myDraw();를 호출하면 참조 할 수 없는 영역이기 때문에 컴파일 에러가 발생하게 된다.
그런고로..
위 예제에서는
s.myDraw();
부분에서 컴파일 에러가 발생하게 된다.
참고 : jabook.org
Java