ch7-1 상속
<상속 Inheritance>
- 기존의 클래스로 새로운 클래스를 작성하는 것(코드의 재사용)
- 두 클래스를 부모와 자식으로 관계를 맺어주는 것
- 자손은 조상(부모의 부모)의 모든 멤버를 상속받는다(생성자, 초기화블럭 제외)
- 자손의 멤버 개수는 조상보다 적을 수 없다(같거나 많다)
- 자손의 변경은 조상에 영향을 미치지 않는다
--> 왼쪽은 Point와 관계가 없기 때문에 클래스를 수정해도 멤버엔 변화가 안 생긴다. 하지만 오른쪽은 Point 클래스를 상속받았기 때문에, Point클래스를 수정하면 멤버의 개수가 바뀐다.
왼쪽 오른쪽은 상속유무의 차이는 있지만, 객체로 만들면 똑같은 결과가 나온다
부모의 변경은 자손에 영향을 미치고, 자손의 영향은 부모에 영향은 안 미친다.
-----------------------------------------------------------------------------
<ch7-3,4 클래스 간의 관계, 상속과 포함>
클래스의 관계는 크게 상속과 포함, 이렇게 2가지로 나눌 수 있다 (실제로는 좀 더 세분화 되어 있다)
<ch7-3 포함 관계>
- 포함(composite)이란?
클래스의 멤버로 참조변수를 선언하는 것
작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다
왼쪽은 c.x c.y c.r
오른쪽은 c.c.x c.c.y c.r
---> Car클래스가 Engine과 Door를 포함. 멤버를 다 쓰기 보다, 엔진이나 도어 처럼 작은 클래스들을 포함시키는게 자동차를 만들면 복잡도가 줄어든다. 그리고 나중에 엔진이나 도어 클래스가 재사용될수도 있다.
<ch7-4 클래스 간의 관계 결정하기>
- 상속관계: '~은 ~이다. (is-a)"
- 포함관계 '~은 ~을 가지고 있다. (has-a)'
(상속은 여러가지 제약이 많으니 꼭 필요할때만 사용하도록하자)
-------------------------------------------------
<ch7-5,6 단일상속, Object 클래스>
- 단일 상속(Single Inheritance)
- 자바는 단일상속만을 허용한다. --> 하나의 부모만 상속 C++은 다중상속허용
- 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.
<Object클래스 - 모든 클래스의 조상>
- 부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 된다.
- 모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다.
toString(), equals(Object obj), hashCode(), ........
+++ toString 중요 !!!
--> Circle@2a139a55
클래스 이름 Circle과 객체 주소값을 보여준다. (정확히 말하자면 객체주소값은 아니지만 객체주소라고 하자 여기선)
--> c.toString을 호출하다 그냥 참조변수 c를 호출하나 결과는 똑같다. 이건 println 메서드의 기능이다.
println이 여기에 참조변수가 들어오면 내부적으로 toString을 호출한다.
일단 여기선 저 두 문장이 동일하다는 것만 알면된다.