상속은 부모 클래스의 정보를 활용해 자식 클래스를 이끌어내는 것을 의미합니다.
문법의 형태는
class 클래스명(부모클래스):
____내부 정의
_____...
_____.
현실에서의 상속과 마찬가지로 프로그래밍의 상속에서도 부모는 자식에게 자신이 가진 요소를 물려줍니다.(변수, 메서드)
현실과 다른 점은 프로그래밍의 상속은 자식이 부모를 지목해 이루어지며 부모쪽에서 물려받은 변수,
메서드 및 자식쪽에서 새로 정의한 변수, 메서드 그리고 물려받은 메서드를 재정의(오버라이딩)해 사용할 수 있습니다.
Person() 클래스의 상속을 받은 Student 클래스의 개략적인 메모리 작동 순서를 살펴봅시다.
(1) 부모 클래스 선언(Person) : 아무 변화 없음
(2) p1 변수가 생성 : 힙에 100번지 형성 자료를 넣을 수 있는 형식 마련 스택의 Person 역시 100번지 주소를 갖게됨
(3) p1 변수가 생성됨에 따라 힙에 p1변수가 200번지(p1인스턴스)에 따로 자료값을 가지게 되고 스택에 주소(200번지)가 생기게 된다.
(4) 자식 클래스 선언(Student) : 아무 변화 없음
(5) s1 변수 생성 : 부모 클래스의 변수들 형식(name, age, height) 밑에 Student 클래스의 하위 변수가 붙음(major)
(6) 하지만 자료값이 들어가는 힙의 저장소에는 p1변수와 s1변수는 엄연히 다른 변수이자 다른 자료값을 가지기 때문에 저장소를 따로 쓰게 된다. 그래서 400번지에 s1의 자료값들을 따로 저장(s1인스턴스)한다.
(7) 힙에 따로 저장한 주소(400번지)를 스택에 표시
(8) s1 인스턴스(400번지)의 자료들을 출력 후 종료
(출력 후 보통 그렇듯 스택에서의 p1과 s1의 주소가 사라질 줄 알았는데 사라지지 않고 있는데 왜인지 모름)