상속

Brogod97·2022년 12월 22일
0

KH TIL

목록 보기
22/37
post-thumbnail

상속이란?

부모 객체와 자식 객체로 나뉨

부모 클래스가 가지고 있는 멤버들을 자식 클래스에서 직접 작성하지 않고 상속받아
자신의 멤버처럼 사용할 수 있음

코드의 재사용성


상속의 장점

  1. 코드 길이 감소

  2. 코드를 공통적으로 관리하기 때문에 코드 추가 및 변경 용이

  3. 코드의 중복 제거

유지보수에 크게 기여


상속 표현식

[접근제한자] class 클래스명 extends 클래스명 {}

public class Academy(자식) extends Company(부모) {}

클래스 간의 상속 시에는 extends 키워드 사용


상속의 특징

  1. 모든 클래스의 최상위 클래스는 Object 클래스임

    • Object 클래스가 제공하는 메소드를 오버라이딩 하여 재구현 가능
  2. 부모 클래스의 생성자 및 초기화 블록은 상속되지 않음

    • 자식 클래스 생성 시, 부모 클래스 생성자가 먼저 실행되기 때문
    • 자식 클래스에서 부모 클래스 생성자를 호출하려면 super()를 사용해야 함
  3. 부모의 private 멤버는 상속은 되나 직접 접근은 불가함

    • super()를 이용하여 부모 필드값에 전달해 생성하거나
    • getter, setter를 이용해 간접 접근해야 함

super(), super.

super()

부모 객체의 생성자를 호출하는 메소드

  • 자식 클래스의 첫줄엔 super()가 존재함 (명시적으로 작성할 시에도, 최상단에 작성)
  • 매개변수가 있는 경우 super(매개변수1, 매개변수2 ... 매개변수n) 처럼 작성

super.

자식클래스 내에서 부모 클래스 객체에 접근하여 필드나 메소드 호출 시 사용


오버라이딩 (Overriding)

오버라이딩 != 오버로딩

오버라이딩 : 자식 클래스에서 부모클래스의 메소드를 재작성 하는 것

  • 자식 객체를 통한 실행 시 자식 클래스에서 재정의된 메소드가 우선권을 가짐

특징

  1. 메소드 헤드라인 위에 Annotation을 표시함 @Override

  2. 접근 제어자를 부모의 것과 같거나 더 넓은 범위로 변경 할 수 있음

    • 부모의 접근제어자가 protected 일 경우
      자식은 protected 또는 public으로 가능
  3. 부모 메소드의 예외처리 클래스 처리 범위보다 좁은 범위로 예외처리 클래스 수정 가능


성립 조건

  1. 메소드 이름이 동일해야 함

  2. 매개변수의 개수, 타입, 순서 동일해야 함

    cf) 오버로딩의 경우 매개변수의 개수, 타입, 순서가 달라야 했음

  3. 리턴 타입이 동일해야 함

  4. private 메소드는 오버라이딩 불가능


오버로딩

: 한 클래스 내에서 같은 이름의 메소드를 여러 개 정의하는 것

성립 조건

  1. 같은 이름의 메소드

  2. 다른 매개변수 선언부 (매개변수 타입, 개수, 순서)

  • 메소드의 리턴 타입은 오버로딩 조건과 관계 없음

오버라이딩 - 오버로딩 차이 비교표

오버라이딩 (Overriding)오버로딩 (Overloading)
하위 클래스에서 메소드 정의같은 클래스에서 메소드 정의
메소드 이름동일 매개변수 동일 (개수, 타입, 순서) 리턴 타입 동일1. 메소드 이름 동일 2. 매개변수 다름 (개수, 타입, 순서)
지역 메소드의 접근범위가 부모 메소드의 접근 범위보다 넓거나 같아야 함접근 제어자와 상관 없음
범위가 좁아야 함예외 처리와 상관 없음

final 예약어

final 클래스

: 상속이 불가능한 클래스

public final class finalClass {}

final 메소드

: 상속 시 오버라이딩이 불가능한 메소드

public final void method() {}

대상에 따른 사용 가능한 제어자, 예약어

대상사용 가능한 제어자 / 예약어
클래스public, (default), final, abstract
메소드모든 접근 제어자, final, abstract, static
변수모든 접근 제어자, final, static
지역 변수fianl

유의 사항

  • 클래스에 abstractfinal 동시에 사용 불가능
  • 메소드에 staticabstract 동시에 사용 불가능
  • abstract 메소드의 접근제어자로 private 불가능

0개의 댓글