상속(Inheritance) - 0816

안씅👩🏻‍💻·2022년 8월 16일
0
post-thumbnail

상속(Inheritance)

상속(Inheritance)이란?

  • 자식 클래스가 부모 클래스의 멤버를 물려받는 것.
  • 자식이 부모를 선택해 부모의 필드(field)와 메소드(method)를 물려 받음.

상속(Inheritance)의 효과

  • 클래스의 간결화
    • 멤버의 중복 작성이 불필요 함.
  • 클래스 관리에 용의함.
    • 상속으로 클래스들의 계층적 분류가 가능해짐.
  • 소프트웨어의 생산성 향상
    • 중복 작성이 불필요함(코드 재사용 가능)
      -> 자식 클래스 개발 속도가 빨라짐
      -> 새로운 클래스를 확장하거나 이전 클래스를 유지 보수 하기 쉬워짐.

상속 대상 제한이란?

  • 부모 클래스의 private 접근자 갖는 필드와 메소드 제외하는 것.

참고 : 부모 클래스가 다른 패키지에 있을 경우, default 접근자 갖는 필드, 메소드도 제외 됨.


클래스 상속(extends)

  • 상속(Inheritance)자식이 상속 받은 부모를 지정함.

  • extends를 사용해 부모를 지정함.

  • public class B exthends A{}

    • 자식 클래스인 B가 부모 클래스인 A를 지정함.

Java 상속 특징

  • 상속 횟수는 무제한임.
  • 상속의 최상위 조상 클래스는 java.lang.Object 클래스임.
    • 모든 클래스 파일은 자동으로 java.lang.Object를 상속 받음.
    • 자바 컴파일러에 의해 자동으로 이루어짐.

참고 : Java에서는 단일 상속만 가능함. 부모 클래스를 나열 할 수 없음.

package p01.basic2 실습


부모 생성자 호출(super)

명시적 부모 생성자 호출

  • 부모의 객체를 생성할 때, 부모의 생성자를 선책해 호출함.

    • 자식(매개변수선언, ...) { super(매개값, ... ); }의 형태
    • 부모 생성자가 없다면 컴파일 오류가 발생함.
    • 반드시 자식 생성자의 첫 줄에 위치해야 함.
    • 부모 default constructor를 가급적이면 없애지 말 것.(반드시 있는 것을 권장)
      • 자식 클래스에서 부모 클래스에 default constructor를 부르지 않게 코딩 가능함.
      • 하지만, 나중에 자식 클래스에서 새로운 constructor 만드는 등 확장식이 생길 가능성을 고려하여 필요함.

    !! : 클래스를 만들면 일단 default constructor 만드세요! 어떤 클래스를 생성하더라고 default constructor는 항상 만들 것을 권유합니다. 파일을 수정하거나 이후에 다른 용도로 사용하게될 가능성을 고려하는 것이죠.


매소드의 재정의(Override)

매소드의 재정의(Override)란?

  • 부모 클래스의 상속 메소드 수정해 자식 클래스에서 재정의하는 것.

매소드 재정의의 조건

  • Override한 method에 access modifier는 큰 범위에서 작은 범위로 갈 수 없음.
  • 부모가 public -> default or private (x)
  • 부모가 default or private -> public (o)

@Override annotation이란?

  • 컴파일 할 때 override가 됐는지 error 체크

protected 접근 제한자


다형성(polymorphism)

class에서 자동형변환(promotion) 정의
1. 부모 자식 클래스간에서만 발생함
2. 자식 인스턴스를 부모 데이터 타입으로 넘길 때 발생되는 현상
- Person p = new Child(); 와 같은 개념
3. 힙메모리 사용 관점에서 보면, promotion은 자식 인스턴스가 생성한 자식 인스턴스 2개 중 부모만 사용함
4. 자식 인스턴스를 부모 인스턴스로 promotion하면, 부모 클래스에서 선언된 field method만 사용 가능

profile
그냥 은근슬쩍 살다 가긴 싫어

0개의 댓글