출처 - Java의 정석 기초편 (남궁 성)
1. 상속(inheritance)
- 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
- 자손 클래스는 조상 클래스의 모든 멤버를 상속받음(생성자, 초기화 블럭 제외)
- 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많음
- 자손 클래스의 변경은 조상 클래스에 영향을 미치지 않음, 반대의 경우 영향을 미침
- 자손 클래스의 인스턴스 생성하면, 따로 조상 클래스의 인스턴스 생성하지 않고도 조상 클래스의 멤버들 사용 가능
- 자바는 단일 상속만 허용, 비중이 높은 클래스 하나만 상속 관계, 나머지는 포함관계
class Parent {}
class Child extends Parent {
// 상속
}
2. 포함(composite)
- 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것
class Point {
int x;
int y;
}
class Circle {
Point c = new Point();
int r;
}
3. 클래스 간의 관계 결정
- 상속 관계는 '~은 ~이다. (is-a)'
- 포함 관계는 '~은 ~을 가지고 있다. (has-a)' - 대부분의 경우
4. Object클래스
- 상속계층도의 최상위 조상 클래스
- 상속 받지 않는 모든 클래스는 자동으로 Object클래스를 상속 받음 (컴파일러 자동 추가)
- 모든 클래스는 Object클래스에 정의된 11개 메서드 상속 받음, toString()
5. 메서드 오버라이딩(overriding)
- 조상 클래스로부터 상속받은 메서드의 내용을 자신에 맞게 변경하는 것
- 선언부(반환타입, 메서드 이름, 매개변수)가 조상 클래스의 메서드와 일치
- 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경 불가(public, protected, (default), private)
- 예외는 조상 클래스의 메서드와 같거나 적어야 함
≠ 오버로딩은 기존에 없는 새로운 메서드를 추가하는 것(상속 관계 아님)
class Point {
int x;
int y;
String getLocation() {
return "x : " + x + ", y : " + y;
}
}
class Piont3D extends Point {
int z;
String getLocation() { // 오버라이딩
return "x : " + x + ", y : " + y + ", z : " + z;
}
}
'Java' 카테고리의 다른 글
제어자(modifier) (0) | 2022.09.30 |
---|---|
super, super(), package, import문 (1) | 2022.09.30 |
메서드, return문, 호출스택, 매개변수, 생성자 (0) | 2022.09.25 |
클래스, 객체, 선언 위치에 따른 변수의 종류 (0) | 2022.09.22 |
배열(Array) (2) | 2022.09.21 |