본문 바로가기

Java

클래스의 업캐스트 - 혼동하지말자.

보통 개발 할 때 업캐스팅을 많이 사용한다.

인터페이스던 추상클래스던 ....

다형성을 위해서..

아래의 예를 보자.

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