마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

상속에 관해서 궁금한게 있습니다.

0 추천
갑자기 상속이 혼란스러워지네요 ㅋㅋ

예를들어 A가 최상위부모라고 하고 B와 C가 각각 A를 상속받고 있습니다.

              A 부모

        B          C 자식들

이런관계요.

근데 A에는 ArrayList<String> arr = new ArrayList<String>(); 이 선언되어 있습니다.

그리고 B에서 arr.add("안녕"); 이라는 구문으로 문자열을 ArrayList에 삽입합니다.

이 작업을 할 경우 부모인 A에 있는 ArrayList에 안녕이란 문자열이 적재되는건가요?

제가 왜 이런 의문을 갖게 되었냐면..

B에서 arr.add를 하고 콜백을 이용하여 부모에 있는 arr의 참조변수를 B에서 다시 받은후 ArrayList안의 내용을 출력해보니 안녕이라는 문자열이 저장되어 있었습니다.

그렇다는것은 자식에서 부모가 물려준것을 조작하면 부모가 가지고 있는것도 바뀐다는건데;;

제가 상속에서 이렇게 미궁에 빠질줄 몰랐네요.

제가 지금까지 생각햇던건 자식에서 아무리 바꿔도 부모의 값은 바뀌지 않는다는건데 어케 된건지 궁금하네요;;
갸아악 (21,260 포인트) 님이 2014년 4월 11일 질문

2개의 답변

+1 추천
상속은 확장입니다.

A가 가진 기능 모두를 가져가는것이지요. 예외로 private한 영역은 상속되지 않지만, super로 A public 메소드를 호출하여 private한 영역의 기능은 수행됩니다.

public 이나 proteced로 선언이 되었다면, A가 가지고 있는 모든 기능을 B가 가져갈 수도있고, 수정하여 나만의 것으로 만들 수도 있습니다.(Override)

부모 영역에 ArrayList가 존재하고, 자식이 같은 영역에 ArrayList를 조작하면 당연히 가지고있는 값이 바뀌게됩니다.

그렇다고 해서 A를 상속받은 B와 C는 같은 객체가 되는것이 아닙니다. 다만 둘다 A의 기능을 활용할 수 있는것이죠.

질문의 요지가 이게 아닐지도 모르겠지만 대략적인 개념은 이렇습니다.
dev_아마 (9,750 포인트) 님이 2014년 4월 14일 답변
0 추천
음.. 갸아악님이 코드를 어떻게 사용하셨는지 모르겠지만

저는 테스트 해보니 안바뀌었네요 '-'

혹시 static 으로 선언하여 공유하신게 아닌가 싶네요
초보개발자ㅠ (33,870 포인트) 님이 2014년 4월 11일 답변
...