생성자의 재발견, super()

2007. 1. 15. 08:22Java Programming

반응형
오늘도 보기 좋게 도장에서 시험에 낙방을 했습니다 ㅠㅠ 한문제만 더 맞았으면 합격인데..
-_-;; 아직도 많이 부족한것 같습니다. 낙방을 하게 된 원인들(오답)을 살펴보다보니 재미있는 문제들이 많더군요.. 정말 자바의 기초적인 것들이지만 하나하나 엄청나게 중요한데도 불구하고 공부를 안했다는 생각에 실망감이 들었습니다. 하지만 실망감만 들었느냐? 그건 또 아니죠... 이렇게 많은 문제들을 틀릴때마다 하나씩 배워간다는 느낌이 들어서 좋기도하고.. 만감이 교차합니다 ^^;;

굉장히 재미있는것들이 많이 있었습니다. 그 첫 번째는 상속에서의 생성자의 재발견 이었습니다. 배웠던 기억이 있지만 역시 공부를 허접하게 한 티가 나는군요 ㅠㅠ;;

아래와 같은 소스코드가 문제의 보기로 나왔습니다.
이걸 실행시켰을때 콘솔창에 어떤 결과가 나올것인가..? 하는 문제였습니다.
여러분들은 어떻게 대답을 하시겠습니까? 저는 보기좋게 틀렸기때문에 ^^;;

public class Camera {

      String name;

      public Camera() {

            this.name = "Camera";

            System.out.println("Here is Camera");

      }

}

public class Eos1D extends Camera {

      private int value;

      public Eos1D() {

            this.value = 100;

            System.out.println("Here is EOS1D");

      }

      public static void main(String[] args) {

            Eos1D cam = new Eos1D();

      }

}

콘솔창을 통해서 직접 실행을 시켜본 결과는 기존에 생각하고 있었던 "Here is EOS1D" 가 아니었습니다.
Here is Camera
Here is EOS1D
이런 결과가 나옵니다. 어떤 연유에서 일까.. 생각을 해보니 지난번에 super()라는 메소드를 언제 사용하는가? 라는 주제로 포스팅을 했던 기억이 났습니다. 문제를 풀면서 특히나 상속관계라는 점에 좀 염두를 두었더라면.. 그치만 이미 틀렸으므로.. 결국 이유는 한가지였습니다.

Argument가 없는 하위 클래스(Eos1D)의 생성자에는 보이지는 않지만 super()를 사용하여 Argument가 없는 상위 클래스(Camera)의 생성자를 호출하여 준다.

그래서 Eos1D라는 클래스 내부에는 name이라는 변수가 없지만 사용할 수 있다! 라는 근거가 될 수도 있더군요.
반응형