JAVA를 잡아라!...

JAVA - 7. 상속 본문

JAVA/JAVA_개념

JAVA - 7. 상속

onivv 2023. 12. 1. 23:39

#1 개념

▶ 상속(inheritance)

    기존에 선언된 클래스의 필드를 새롭게 만들 클래스의 필드로 사용하고자 할 때

    여러 클래스 선언 시 필드가 겹치는 경우,

    부모 클래스를 먼저 선언하고

    공통 필드를 묶어서 자식 클래스들에게 상속해준다.

      - 부모 클래스, 상위 클래스, 슈퍼 클래스, 기반 클래스

      - 자식 클래스, 하위 클래스, 서브 클래스, 파생 클래스

 

#2 문법

▶ 문법

     class A {

                  A 필드

     }

     class B extends A {

                  A, B 필드

     }

 

extends : 상속의 키워드로 부모의 인자를 상속받은 자식은 계속 확장

 

super() : 부모 생성자

    : 자식 클래스 타입의 객체로 부모 필드에 접근할 수 있음

      하지만 자식 생성자만 호출하기 때문에, 자식 필드만 메모리에 할당된다...

      자식 생성자는 항상 부모 생성자를 호출하기 때문에 자식 생성자 호출 시 부모와 자식 필드 모두 메모리에 할당됨

      이때 부모 생성자를 호출하는 방법은 super()를 사용!

      super()를 작성하지 않더라도 컴파일러가 자동으로 작성해줌

 

#3 다형성(polymorphism)

오버로딩

     - 함수명 동일

     - 메소드 시그니쳐 다름

     - 상속관계 X

     - 함수명 중복정의 허용

     - 함수가 n개(여러개)

오버라이딩(재정의)

      - 함수명 동일

      - 메소드 시그니쳐 같음

      - 상속관계 O

      - 메소드 재정의

      - 메소드가 1개

 

         부모 필드에서 선언한 메소드자식 필드에서 수정하고자할 때 재정의를 해야 함

         이는 자식에서 부모 필드의 메소드와 동일한 이름으로 선언하는 것

         부모 필드가 메모리에 먼저 할당되고 a라는 메소드가 먼저 올라간다고 하면,

         자식 필드가 메모리에 할당되면서 재정의한 a메소드가 새롭게 만들어지는 것이 아닌

         기존에 할당된 a a메소드 저장공간에 새롭게 재정의한 소스코드의 주소가 들어감

         따라서 자식 객체로 a 메소드에 접근하면 자식 필드에서 재정의한 소스코드의 내용이 읽히게됨