extends 키워드를 사용하여 작성새로 작성하려는 클래스의 이름이 Child 이고
상속받고자 하는 클래스의 이름이 Parent 라고 한다면 이렇게 작성하면 된다.
class Child extends Parent { ... }
이 두 클래스를 서로 상속 관계 에 있다고 하며,
상속해주는 클래스는 부모 클래스, 상속 받는 클래스는 자식 클래스라고 한다.


만약 여러 부모 클래스에서 상속받은 멤버 중 동일한 이름의 필드나 메소드가 있다면,
와 같은 모호함이 발생하기 때문이다.
그래서 자바에서는 다중 상속을 포기하고 단일 상속만을 허용한다.
단일 상속은 클래스 간의 관계를 명확히 한다.
클래스 간의 관계는 상속 말고도 재사용하는 또 다른 방법이 있다.
바로 포함 관계 이다.
포함 관계를 맺어 주는 것은 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 말한다.
class Circle {
int x; // 원점의 x 좌표
int y; // 원점의 y 좌표
int r; // 반지름
}
class Point {
int x; // x 좌표
int y; // y 좌표
}
원을 표현하기 위한 Circle 클래스가 있고
좌표상의 점을 다루기 위한 Point 클래스가 있다.
이 둘의 관계를 상속으로 할지 포함으로 할지 정해야 한다.
// 상속 관계로 설정한 클래스
class Circle extends Point {
int r;
}
// 포함 관계로 설정한 클래스
class Circle {
Point p;
int r;
}
결과적으로 보면 Circle의 멤버로 좌표의 점과 반지름을 필드로 갖는다.
이럴 때는 is-a 와 has-a를 넣어 문장을 만들어보면
클래스 간의 관계를 명확히 할 수 있다.
has-a 의 문장이 더 옳으므로 Circle 과 Point 는 포함 관계임을 알 수 있다.
도형을 의미하는 Shape 클래스와 원을 의미하는 Circle 클래스,
점을 의미하는 Point 클래스의 관계는 어떻게 정의할 수 있을까?
class Circle extends Shape {
Point p;
}
이렇게 관계를 만들 수 있다.
Object 클래스는 모든 클래스 상속 계층도의 최상위에 있는 조상클래스이다.
어떠한 클래스로부터 상속 받지 않는 모든 클래스는 컴파일 단계에서 자동적으로 Object 클래스를 상속받게 한다.
class Tv { ... }
아무 것도 상속 받지 않는 Tv 클래스가 있다고 하자.
이 코드를 컴파일하게 되면 컴파일러는 자동적으로 extends Object를 추가시킨다
class Tv extends Object { ... }
이렇게 올라다가보면 어떤 클래스든 최상위 부모 클래스는 Object 클래스가 된다.
그렇기 때문에 Object 클래스에 정의된 toString 메소드나 equals 메소드를 사용하는 것이 가능한 이유이다