반응형
기존의 클래스를 재사용하여 새로운 클래스 작성
- 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램 생산성과 유지보수에 크게 기여한다.
자식클래스는 부모클래스의 멤버들을 포함
- 자식 클래스는 부모 클래스의 모든 멤버를 상복 받으니까 항상 부모 클래스보다 같거나 많은 멤버를 가지게 된다.
- (상속이 계속될 때 마다 상속받는 클래스의 멤버 개수 계속 증가)
- 위에 같은 이유 때문에 확장(extend)한다는 의미로 해석 가능
자식 클래스는 부모 클래스의 모든 멤버를 상속 받는다
- 단, 생성자와 초기화 블럭은 상속되지 않는다
자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많다.
상속이외에 클래스를 재사용하는 방법 → 클래스 간에 포함(composite) 관계를 맺어 주는 것.
- 클래스 간의 포함관계를 맺어 주는 것은 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 뜻한다.
Java에서는 다중 상속을 허용하지 않고 단일 상속만 허용한다.
- 장점
- 다중상속을 허용하면 여러 클래스로부터 상속받을 수 있기 때문에 복합적인 기능을 가진 클래스를 쉽게 작성할 수 있다.
- 단점
- 클래스간의 관계가 매우 복잡해진다.
- 서로 다른 클래스로 부터 상속받은 멤버간의 이름이 같은 경우 구별할 수 없다.
단일 상속은 하나의 클래스만을 가질 수 있기 때문에 다중상속에 비해 불편한 점도 있지만, 클래스 간의 관계가 보다 명확해지고 코드를 더욱 신뢰할 수 있게 만들어 준다는 점에서 다중상속보다 유리하다.
public class Point {
int x;
int y;
}
public class Circle {
Point point = new Point();
//int x;
//int y;
int r; // 반지름
}
클래스를 작성하는데 있어서 상속관계를 맺어 줄 것인지 포함관계를 맺어 줄 것인지 결정하는 것은 때때로 혼돈스러울 수 있다.
public class Circle {
Point point = new Point();
int r;
}
public class Circle extends Point{
int r;
}
Circle은 point이다. → 문장이 성립하면 서로 상속 관계를 맺어 준다.
Circle은 point를 가지고 있다. → 문장이 성립하면 서로 포함관계를 맺어 준다.
- 여기서는 포함관계가 맞는거 같다. 원은 점과 반지름으로 구성되기 때문에
- Car와 SportCar클래스는 SportCar는 Car이다.(~은 ~이다.) → 상속관계
Object 클래스 - 모든 클래스의 조상
모든 클래스들은 Object class를 자동적으로 상속하고 있다.
- 모든 클래스의 부모 클래스 되도록 자동적으로 상속한다.
- 부모 클래스를 계속 찾아 올라가면 최상단은 Object class 이다.
💡 상관 관계를 그림으로 표현한 상속계층도(class hierarchy)를 단순화하기 위해서 Object 클래스 생략하는 경우가 많다.
💡 Java의 모든 Class들은 Object클래스의 멤버들을 상속 받기 때문에 주요 메서드인 toString(),equals(Object o)등을 사용 가능하다.
반응형
'책 > Java의 정석' 카테고리의 다른 글
[java] 참조변수(super) (0) | 2023.02.04 |
---|---|
[java] 오버로딩 오버라이딩 (0) | 2023.02.04 |
[java] 생성자(constructor)와 this, this() (2) | 2023.02.03 |
[java] static (0) | 2023.02.03 |
[java] 변수의 초기화 (0) | 2023.02.03 |