Q&A
지도 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); 답변 부탁드립니다. 감사합니다.
- Likes
- 0
- Comments
- 3
- Viewcount
- 399

