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 }
댓글 입력