OOP 특징 2 - 상속성

상속(Inheritance)란?

  • 부모 클래스로부터 속성 또는 특성 (attribute, property)을 상속받는 것
    즉, variable(변수), method(함수)를 물려받는 것임
  • 다중 상속은 불가능하다. (Java의 특징, 타언어는 가능)
    예를 들어, class Child extends Human, Animal { ... 등은 불가

구문 형식 : extends

    class 부모클래스명 {
        부모변수
        부모메소드
    }

    class 자식클래스명 extends 부모클래스명 {
        ((부모변수))
        ((부모메소드))
        자식변수
        자식메소드
    }

 

코드 예시 1: 기본적인 형태

- 부모변수: number, name

- 부모메소드: parent_method()

- 자식클래스 (=Child)에서 부모의 변수와 함수를 모두 사용할 수 있음

class Parent {
    int number;
    String name;

    void parent_method() {
        System.out.println("Parent parent_method()");
    }
}

class Child extends Parent {
}
// 메인함수
Child child = new Child();

child.number = 123;
child.name = "홍길동";
child.parent_method();

실행 결과

 

(참고) 자식 클래스의 인스턴스를 생성할 때 호출되는 생성자를 확인해보자

부모 생성자가 먼저 호출된 후, 자식의 생성자가 호출되는 것을 볼 수 있다

실행 결과

오버라이드 (Override)

- 상속 받은 클래스에서 추가/보강을 기입하는 것

- super: 부모 클래스를 가리키는 주소 (pointer; 참조 또는 reference라고도 함)

 

코드 예시 2: 부모 메소드를 오버라이딩 하는 경우

실행 결과

 

코드 예시 3: 부모 메소드를 오버라이딩 했으나, 부모 메소드를 호출하는 경우

이 때 접근지정자 super를 활용할 수 있다.

 

(참고) 부모 클래스의 멤버 변수의 접근제어자가 private 혹은 protected 일 때

private

- 자식 클래스에서 접근이 불가능하다

- 외부에서 접근이 불가능하다

- setter, getter로 외부에서 접근이 가능하다

 

코드 예시

(좌) 부모 클래스 / (우) 자식 클래스
메인 함수
실행 결과

protected

- 자식 클래스에서는 접근이 가능하다

- 외부에서는 접근이 불가능하다

- setter와 getter로 외부에서 접근이 가능하다

+ Recent posts