상속관계의 초기화 과정 - 생성자 호출

상속관계에서 자식 클래스를 인스턴스화 하면 부모 클래스의 객체도 인스턴스화가 진행된다.

자식 클래스의 객체가 인스턴스화 되기 위해서는 부모 클래스의 객체가 인스턴스화 되어야한다.

즉, 가장 상위의 부모 클래스부터 인스턴스화가 진행된다. 즉 Heap에 메모리가 할당될 때 부모의 필드부터 필요한 메모리공간을 계산을 시작하여 생성하고 초기화한다.

상속관계의 초기화 과정 - super()

super() 생성자는 자식클래스에서 명시적으로 부모 클래스의 생성자를 호출할 수 있도록하는 방법이다.

자바는 자식 클래스의 객체가 인스턴스화 될 때 기본적으로 부모 클래스의 default 생성자를 호출한다.

부모 클래스의 default 생성자가 정의되어 있지 않으며, 자식 클래스는 명시적으로 부모 클래스의 생성자를 호출해야 한다.

public Developer 사이에는 아무것도 들어갈 수 없고, 코드 맨 위줄부터 반드시 super() 생성자를 입력해야 한다.

메소드 재정의 개요

메소드 재정의(overriding)는 부모 클래스의 메소드를 자식 클래스가 확장하거나 다시 정의하는 것을 말한다.

메소드 재정의를 구현하는 방법은 부모 클래스로부터 상속받은 메소드의 반환타입, 메소드명, 파라미터를 동일하게 하여 자식클래스에서 재정의한다.

자식 클래스가 부모 클래스의 메소드를 재정의할 때 접근 지정자의 범위는 넓거나 같아야 한다. 접근지정자만 변경이 가능하다.

여기서 overloading 과 overriding의 차이는 overloading은 한 클래스 내에서 일어나고, overriding은 상속관계에서 일어난다.

즉 두 개 이상의 클래스에서 일어나는 것이다.

package는 class Shape { int x;} 라고 되어있으면 소속된 패키지 내에서 자유롭게 접근이 가능하다는 것을 의미한다.

메소드 재정의 - super()

메소드 재정의는 부모 클래스로부터 상속받은 기능을 변경하거나 확장하기 위해서다.

자식 클래스에서 상속받은 메소드의 기능을 확장하기 위해서는 부모 클래스의 메소드에 대한 호출이 필요하다.

자식 클래스가 부모 클래스의 구성 요소에 접근하기 위해서는 super() 키워드가 필요하다.

profile
기억보다는 기록하는 개발자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN