본문 바로가기

Java

상속, 포함, Object클래스, 오버라이딩

출처 - 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