소개
게시글
질문&답변
2022.05.25
지도 api 프로젝트 코드 문의
강사님 안녕하세요. u.openConnection() 이게 결국 반환하는 게 URLConnection 객체 아닌가요 ? 예를 들어, 부모 클래스가 animal 이고 상속받은 자식 클래스가 dog 라고 했을 때 new dog()로 객체를 생성하면 위의 그림처럼 부모 클래스의 객체와 자식 클래스의 객체가 함께 생성된다는 건 맞는데(상속 체인), new animal()로 객체를 생성하면 자식 클래스인 dog 객체는 메모리에 생성이 안되잖아요. 위의 예시처럼 보면 URLConnection이 부모 클래스(abstract) 이고 이걸 상속 받는 게 HttpURLConnection인데, 그림에 표현해주신 것처럼 u.openConnection() 이 URLConnection을 반환한다면 URLConnection이 부모 클래스이니까 부모클래스의 객체만 생성되는게 맞을 거 같은데요. 위의 그림만 보면 자식 클래스인 HttpURLConnection이 new 될 때 생성자에 super()이 디폴트로 되어 있고 여기서의 super()은 URLConnection이니 URLCOnnection도 메모리에 올라와서 오버라이딩의 형태로 활용이 된다일텐데, 부모 클래스가 객체로 생성이 되어도 자식 클래스도 자동으로 생성이 된다 (위에서 얘기한 것과 반대) 이건 아니지 않나요 ? Dog 클래스가 Animal 클래스를 상속받았습니다. Animal dog = new Dog(); Dog dog2 = (Dog)dog; // 이건 당연히 가능 Animal cat = new Animal(); Dog dog3 = (Dog)cat; // 여기서 에러 나는데 당연히 여기서는 Animal 객체만 있고 Dog 객체는 메모리에 올라와 있지 않기 때문에 --> (HttpURLConnection)u.openConnection(); 이 코드도 u.openConnection()이 상위 클래스인 URLConnection 객체를 만드는 거라면 이 코드에서는 하위 클래스 타입의 변수가 접근을 못하는 게 당연한 거 같은데요. (하위 클래스 객체는 없으므로) System.out.println(dog2.a); System.out.println(dog3.a); 답변 부탁드립니다. 감사합니다.
- 0
- 3
- 275
질문&답변
2021.01.17
포인터 이차배열 질문 드립니다.
안녕하세요. 참조해주신 링크 가서 읽어보니, 접근하는 관점에 대한 차이 정도로 이해하면 될 것 같네요. 친절한 답변 감사드립니다.
- 0
- 4
- 210
질문&답변
2021.01.16
포인터 이차배열 질문 드립니다.
안녕하세요. 네, 답변 감사드립니다. 저도 위의 그림처럼 이해를 하고 있었지만, 수업을 들으면서 생각하다보니 위의 그림으로는 약간 헷갈리는 부분이 있어서요. 배열의 이름이 포인터와 같은 역할을 한다. int *ptr; 로 선언을 하고 어느 변수값을 참조할 경우,ptr은 참조하는 변수의 주소값, 그리고 &ptr은 포인터 변수 자체의 주소값이라 같을 수가 없을텐데(자기 자신을 참조하거나 하는 경우는 제외하겠습니다.) 실제로 위와 같이 배열명으로 접근을 할 경우에는 따로 포인터처럼 메모리 상에 변수공간이 할당되는 것도 아니고위의 예로 말씀드리자면 arr[0] = &arr[0] 이다 보니 이 부분을 어떻게 이해하는 게 조금 더 좋을지 고민입니다. 바쁘실텐데 답변 주셔서 감사드리고 위의 질문 또한 답변 기다리겠습니다. 감사합니다.
- 0
- 4
- 210