java extends 질문

조회수 724회

이미지

안녕하세요. extends 부분 배우고있는데, XYZ클래스 부분이 이해가 안되네요. XYZ클래스의 X xyz는 Z()를 호출한다는 의미인가요? 실행을 시켜보니 X Y Z 가 출력되던데, 실행과정이 좀 아리까리합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 자식 클래스 생성자 첫 라인에 super() 를 자동으로 삽입합니다. 즉 생성자마다 부모 클래스의 생성자를 호출하므로 최상위 부모의 생성자부터 실행이 됩니다.

    확인하는 가장 쉬운 방법은 class를 disassembly 하여 바이트 코드를 확인하는 겁니다. JVM의 바이트 코드를 읽는 방법은 그렇게 어렵지 않으니 시간내서 학습하면 성능 이슈나 애매한 상황에서 판단하는데 많은 도움이 됩니다.

    class Parent {
        public Parent() {
            System.out.println("Parent");
        }
    }
    
    class Son extends Parent {
        public Son() {
            System.out.println("Son");
        }
    }
    
    public class Main2 {
        public static void main(String args[]) {
            Son son = new Son();
        }
    }
    
    // 바이트코드를 직접 보면 생성자에서 부모 생성자를 호출합니다. 이 부분은 자동으로 추가되는 부분입니다.
    
    [allinux@lghnh ~]$ javap -c Son.class
    Compiled from "Main2.java"
    class Son extends Parent {
      public Son();
        Code:
           0: aload_0
           1: invokespecial #1                  // Method Parent."<init>":()V  <- 부모 클래스 생성자를 호출함
           4: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
           7: ldc           #3                  // String Son
           9: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
          12: return
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)