ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 상속(Inheritance)
    JAVA 2023. 3. 2. 20:20

    상속 : 상위(부모) 클래스의 멤버를 그대로 물려받는 것.

     

    • 기존 클래스에 영향을 주지 않으면서 재사용 가능
    • 상위 클래스의 모든 멤버를 물려받는 것은 아니다.(private 접근제한자로 설정된 멤버는 직접 접근 불가)
    • extends 키워드를 사용
    public calss 자식클래스 extends 부모클래스 {
    }

     

    • 자바에서는 다중 상속을 허용하지 않는다.
      다중 상속: 하나의 자식 클래스가 여러 부모 클래스를 상속받는 것

     


    super 키워드

    • 부모 클래스의 멤버를 호출할 때는 super 키워드를 사용한다.
      부모 클래스의 멤버와 동일한 이름을 가진 멤버를 super 키워드 없이 호출하면 자식 클래스의 멤버를 우선 사용한다.(= 오버라이딩)
    • 부모 클래스에서 상속 가능한 접근제한자(public, protected)로 선언된 멤버만 호출 가능하다.

     

    1. 생성자

    • 자식 클래스 내부에는 부모클래스의 기본 생성자가 숨겨져 있다.(컴파일 시 자동 추가됨)
      그래서 자식 클래스 객체를 생성할 때 상위 클래스 객체가 먼저 생성된다.
    • 부모 클래스의 생성자는 super() 로 호출할 수 있다.
    pulbic 자식클래스(...) {
        super();
        ...
    }

     

    2. 필드와 메소드

    • super. 다음에 참조하려는 부모 클래스의 필드 또는 메소드 이름을 입력

     


    메소드 오버라이딩(Overriding)


    오버라이딩 : 상위 클래스로부터 물려받은 메소드를 하위 클래스의 형편에 맞게 재정의하는 기능

     

    • 부모 클래스 메소드의 선언부(리턴 타입, 메소드 이름, 매개변수)와 동일해야 한다.
    • 접근 제한을 더 강하게 오버라이딩할 수없다(public → private으로 변경 불가).
    • 새로운 예외에 대해 호출한 쪽으로 넘길(throws) 수 없다.

     


    Override 어노테이션

    • 오버라이딩하는 메소드 위에 @Override 입력
    • 상위 클래스로부터 물려받은 메소드를 재정의한다는 것을 시각적으로 알 수 있다.
    • Overriding 관련된 문법 오류 검증 가능
    • 생략해도 실행에 문제는 없음

     


    이클립스에서 재정의할 메소드 자동 생성하는 기능

    상속할 부모 메소드의 속성을 정확히 알지 못하는 경우에 유용하다.

     

    1. 자식 클래스에서 오버라이딩 메소드를 작성할 위치로 입력 커서를 옮긴다.

    2. 상단 메뉴 또는 마우스 우클릭하여 [Source] - [Overriding/Implement Methods]를 선택한다.

     

    3. 부모 클래스에서 오버라이딩될 메소드를 선택하고 [OK] 버튼을 클릭한다.

     


    봉인된 클래스

    • 무분별한 자식 클래스 생성을 방지하기 위해 도입된 기능
    • 상속 가능한 자식 클래스를 지정할 수 있다.
    • Java 15부터 지원

     


    특정 자식 클래스만 상속 가능한 클래스

    • 클래스 선언 시 class 키워드 앞에 sealed 키워드 추가하고 클래스명 다음에 permits 키워드와 상속 가능한 자식 클래스를 지정한다.
    • 봉인된 클래스를 상속받은 자식 클래스는 sealed, final, non-sealed 키워드 중 하나를 반드시 지정해야 한다.
    public sealed class Person permits Employee, Manager {
        ...
    }

     


    상속 불가능한 클래스

    •  클래스 선언 시 class 키워드 앞에 final 키워드를 추가한다.
    public final class Employee extends Person {
        ...
    }

     


    봉인 해제

    • 클래스 선언 시 class 키워드 앞에 non-sealed 키워드를 추가한다.
    public non-sealed class Manager extends Person {
        ...
    }

     


     

     

    'JAVA' 카테고리의 다른 글

    static 키워드  (0) 2023.03.02
    생성자(Constructor)  (0) 2023.03.02
    정보 은폐(Infomation Hiding)와 캡슐화(Encapsulation)  (0) 2023.03.02
    클래스와 객체(인스턴스)  (0) 2023.03.02
    메소드(Method)  (0) 2023.03.02
Designed by Tistory.