Daily Front_Minhhk

[JAVA] 생성자, 오버라이딩 - 정리 본문

정보처리기사/데일리

[JAVA] 생성자, 오버라이딩 - 정리

Minhhk 2023. 3. 12. 17:25
class Parent{
  public Parent( ){
    System.out.println("부모 생성자");
  }
  public void fn( ){
    System.out.println("오버라이딩 - 부모 클래스의 fn 메서드");
  }
}

class Child extends Parent{
  public Child( ){
    System.out.println("자식 생성자");
  }
  public void fn( ){
    System.out.println("오버라이딩 - 자식 클래스의 fn 메서드");
  }
}

public class Soojebi{
  public static void main(String args[]){
    Child c = new Child(); // ①
    c.fn(); // ②
  }
}

 

먼저 생성자가 무엇인가요?

생성자는 클래스 이름과 동일한 명칭을 가지고 있는 메서드이죠.

그러면 Parent 클래스에서는 Parent 메서드가 생성자이고, Child 클래스에서는 Child 메서드가 생성자입니다.

 

그리고 생성자는 부모 클래스의 생성자 → 자식 클래스의 생성자 순으로 호출됩니다. 이것도 기억해두세요.

다음으로 오버라이딩은 무엇인가요?

오버라이딩은 클래스 이름과 동일하지 않은데, 부모 클래스와 자식 클래스 안에 동일한 이름을 가지고 있는 메서드입니다.

위에 코드를 보면 Parent 클래스의 fn이라는 메서드와 Child 클래스의 fn이라는 메서드가 fn이라는 동일한 이름을 가지고 있으므로 fn은 오버라이딩 관계입니다.

 

그리고 오버라이딩은 자식 클래스가 호출됩니다. 이것도 기억해두세요.

그러면 위의 코드를 설명해보겠습니다.

① Child c = new Child();에서 new 키워드에 의해 클래스의 생성자가 호출이 됩니다.

이 때 생성자의 호출 순서는 부모 클래스의 생성자 → 자식 클래스의 생성자이므로 부모 클래스인 Parent의 Parent 메서드를 호출하고, 그 다음에 자식 클래스인 Child의 Child 메서드를 호출합니다.

② 다음으로 c.fn( );인데, c는 Child 클래스를 저장하는 인스턴스(변수)이므로 fn이라는 메서드를 호출해야 하는데, 부모도 fn 메서드가 있고, 자식도 fn 메서드가 있습니다. 이 때 뭘 호출한다고 했죠? 오버라이딩일 때는 자식 클래스의 메서드를 호출하므로 Child에 있는 fn 메서드를 호출합니다.

그러면 위에 소스 코드 출력 결과는 어떻게 될지 감이 오시나요?

위에 소스 코드 출력 결과는 다음과 같습니다.

부모 생성자

자식 생성자

오버라이딩 - 자식 클래스의 fn 메서드

[출처] 생성자 vs 오버라이딩(클래스 상속이 헷갈리는 분들 필독!) (수제비- IT 커뮤니티 (정보처리기사,빅데이터분석기사 등)) | 작성자 두음쌤

'정보처리기사 > 데일리' 카테고리의 다른 글

정처기 실기 데일리 문제 종합_2023  (0) 2023.04.19
데일리 // 31~  (0) 2023.04.18
[JAVA] 오버라이딩  (0) 2023.03.25