사진의 코드 참고해주세요. 명품 자바프로그래밍 예제인데,
코드가 잘 이해가 안돼요. 두번째 사진의 // 모든 도형 출력 부분부터 보면, Shape p = start;를 통해
Shape의 레퍼런스 변수 p가 start가 가리키는 레퍼런스를 똑같이 가리키게끔 하여, 변수 p는 위에 지정했던 Line 클래스에서 생성한 객체를 가리킨다는 것 까진 알겠어요.
그래서 처음에 반복문을 실행하면 p.draw();를 통해 p가 가리키는 객체인 Line이 생성한 객체에서 오버라이딩을 통해 업캐스팅이 되었지만 LIne의 draw 메소드가 실행되게 되고,
그 이후가 이해가 안되는데요. p=p.next;를 하게되면 위의 문장에서
맨 마지막에 obj = new Circle(); last.next=obj;를 통해 Shape next 레퍼런스 변수가 가리키는 객체는
Circle에서 생성한 객체로 초기화를 시킨 것이잖아요?
그런데 왜 쌩뚱맞게 Rect에서 생성한 객체를 가리키게 된다는 것인지... 도무지 이해가 안가요.
동시에 저 문장에서 결국 Shape의 레퍼런스 변수는 start, last, obj, next가 되는것인데. 이 중 last의 역할도 모르겠구요. 아마 이거랑 연관이 있는듯 싶은데 이해가 잘 안가네요.
조건문을 왜 사용했는지 조건문의 조건이 p!=null인 것도 이해가 안가네요 ㅠㅠ
그냥 니 이거볼때가아니라 생활코딩 자바나봐라
생코나 보는거 추천한다. 기초 문법적 지식이 없는데 어떻게 자료구조를 이해하냐??
p.next.next.next를 생각해봐라 p.next = obj last = obj, obj.next == last.next
메소드 오버라이딩
1->2->3->4 로 연결되어 잇고 1의 next 가 2임