돌맹이떼굴떼굴 2023. 4. 13. 11:04

ch7-1 상속(Inheritance)

Parent라는 class가 있다. Child class를 만들 때 Parent를 부모로 한다. Parent와 Child는 상속관계에 있다.

 

자손은 조상의 모든 멤버를 상속받기 때문에 부모의 멤버만 받는 것이 아니라 부모의 부모 것도 받는다. 단 생성자, 초기화 블록은 제외한다. 

 

코드를 보면 Parent 멤버 1개, 자식의 멤버는 없고 상속 받은 멤버 1개가 있다. class Child extends Parent { }에 맴버가 하나도 없는 거 같지만 부모를 모두 물려받아 int age가 들어있다. 자신의 멤버는 없고 상속받는 멤버가 있다. Parent 멤버 1개, Child 멤버 1개 이므로 두 class 멤버 개수가 같아 조건을 만족한다.

 

자손 클래스의 새로운 멤버를 추가해도 부모 클래스는 영향을 받지 않는다. Parent class는 멤버 1개, Child class의 멤버는 자신 멤버 1개, 상속 받은 멤버 1개 총 2개이다. 상속을 하면 자식의 멤버가 계속해서 불어나 확장되어 이를 extend라 한다. 따라서 키워드 "extends"를 사용한다.

 

Point class 2차원 좌표의 (x, y) 있다. 이때, 3차원 좌표의 (x, y, z) 갖는 Point3D 만든다. 기존의 Point class 관련없는 class 만들 있고, Point class 상속받아 만들 있다. 왼쪽은 Point class 변경되어도 영향 받지 않는다. 하지만 오른쪽의 class 상속관계에 있어 Point class 영향을 받는다. Point class 멤버 int y 없어지면 Point3D 멤버 개수도 달라진다.

 

객체를 만들면 객체의 차이가 없다. 상속받은 것은 멤버가 없어 보이는 같지만 실제로는 int x, y 있다. 결론은 상속받은 class 부모의 멤버, 자신의 멤버가 합쳐져 객체를 생성한다.