Daily Front_Minhhk

[JAVA] 오버라이딩 본문

정보처리기사/데일리

[JAVA] 오버라이딩

Minhhk 2023. 3. 25. 23:49
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(); // ②
  }
}
[출처] 생성자 vs 오버라이딩(클래스 상속이 헷갈리는 분들 필독!) (수제비- IT 커뮤니티 (정보처리기사,빅데이터분석기사 등)) | 작성자 두음쌤

 

 

먼저 생성자가 무엇인가요? 생성자는 클래스 이름과 동일한 명칭을 가지고 있는 메서드이죠. 그러면 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 메서드

 

 

+

1. 먼저 오버라이딩은 상속이 되어야 가능해요. 상속이 없으면 오버라이딩이라는 것 자체가 성립할 수 없어요.

2. 상속
class A{ }
class B extends A { }
가 상속이죠? ★★★★이건 오버라이딩이 아니에요.!!!"★★★★
상속할 때 B extends A를 보고 B는 자식이고, B의 부모는 A구나를 알 수 있어요.

3. 오버라이딩
상속 관계여야 오버라이딩이 가능합니다.
class A {
 void fn(){};
}
class B extends A{
 void fn(){};
}
보시면 A랑 B랑 상속 관계인데, 메서드가 fn이 똑같이 있죠? 이게 오버라이딩이에요.

4. 생성자
생성자랑 오버라이딩이 달라요.
★★★★ 그리고 생성자랑 상속이랑 혼용해서 말하는데, 생성자는 클래스랑 이름이 똑같은 메서드에요.★★★★

class A{
 A(){} // 얘가 생성자에요. 클래스랑 이름이 똑같으니깐요.
}

 

 

 
 
 
 

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

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