작성
·
206
·
수정됨
0
해당 예제에서 자바 메모리 구조가 잘안그려집니다.
스택영역에 main() 프레임이 생성
ClassC classC = new ClassC(); 를 통해
힙영역에
ClassC 인스턴스 생성
super를 통해 ClassB 인스턴스 생성
super를 통해 ClassA 인스턴스 생성
C->B->A 순서로 힙영역에 인스턴스가 생기는건가요??
new 키워드가 실행되는 순간 힙영역에 인스턴스가 생성된다면 C->B->A가 맞는거 같지만
생성자 코드가 전부 다 실행되어야 힙영역에 인스턴스가 생성이되는 거라면 A->B->C 순서로 생성되어야 맞는거 같은데
정확히 어떤 순서로 메모리 구조가 구성되는지 그림이 안그려집니다.
그리고 결국 메인 메서드가 종료가 되면 스택영역에서 main() 프레임이 제거되어 힙영역에 가비지 컬렉션이 동작될텐데 ClassC가 카비지 컬렉션에 의해 제거가 된다면 ClassB와 ClassA도 연쇄작용으로 제거가 되는게 맞을까요?
답변 2
0
제가 학습하면서 이해한것은 다음과 같습니다.
상속받은 객체를 생성할 때는 그 부모 객체를 먼저 생성한다고 이해하시면 될 것 같습니다.
상속이라는 것이 부모 객체의 속성과 기능을 물려받는 것인데 물려받기 위해서는 먼저 부모 객체의 인스턴스가 생성되어 있어야겠지요.
ClassA, ClassB, ClassC 생성자에 출력값을 줬을 때 결과는 아래와 같이 상위 부모인 A가 먼저 생성되고, 그 다음 B, 마지막으로 C가 생성되는 것을 확인할 수 있습니다.
생성된 classC의 참조값에는 ClassA, ClassB, ClassC의 인스턴스가 생성되어 있습니다.
그렇기에 ClassC가 가비지 컬렉션에 의해 제거될 때 B와 C의 인스턴스도 제거된다고 보시면 될 것 같습니다.
0
9.상속 pdf 20P~23p를 참조 하시면 답이 될것 같습니다. 여기서 child 인스턴스 를 설명할고 있지만, 그안을 보면 Parent라는 인스턴스가 같이 있는것을알수 있습니다.
그러니까 같은 주소 안에 Child라는 인스턴스가 있고 그 안에 어떻게 동작하는지는 정확히 자세히는 모르지만,
그림처럼 있다? 라고 이해하시면 됩니다.
틀린 다면 공식서포터즈 님들이나 영한님께서 대답해주실거에요.