2014-09-28 2 views
3

나는이 테스트를 통해 자바 책에서이 프로그램을 보았는데 나는 이것이 정답 인 이유를 이해할 수 없다.자바 테스트 (초보자)

프로그램의 출력은 어떻게 될 것인가?

class Base 
{ 
    Base() 
    { 
     System.out.print("Base"); 
    } 
} 
public class Alpha extends Base 
{ 
    public static void main(String[] args) 
    { 
     new Alpha(); /* Line 12 */ 
     new Base(); /* Line 13 */ 
    } 
} 

모든 답변 :

  • A.Base
  • B.BaseBase
  • C.Compilation는
  • D.The 코드는 더 출력

으로 실행 실패 정답은 BaseBase입니다.

+1

[관련] (http://stackoverflow.com/questions/10508107/why-call-super-in-a-constructor) – Scis

답변

9

처음으로 new Alpha()을 호출하면 Alpha의 기본 생성자가 호출됩니다. "기본"을 인쇄, (AlphaBase의 서브 클래스 becauses)

public Alpha() { 
    super(); 
} 

따라서, new Alpha()Base의 기본 생성자를 호출하여 명시 적으로 선언되지 않기 때문에, 그것은 암시 적으로 정의된다. 그런 다음 new Base()은 해당 생성자를 호출하고 "Base"를 다시 인쇄하여 "BaseBase"의 최종 출력을 생성합니다.

3

대답은 B.BaseBase입니다. 이유가 간단합니다. 모든 객체는 인스턴스화 될 때 클래스의 기본 생성자를 호출합니다. Alpha 클래스에는 생성자가 없지만 Java는 암시 적으로이를 제공하며이를 통해 기본 클래스 인 Base()의 기본 생성자를 호출합니다.

의 암시 슈퍼() 키워드는 모든 기본 생성자

당신이) (새 자료를 호출
public Alpha() { 
    super(); 
} 

과 같은 방법을의 시작 부분에 추가됩니다 같은; 각 출력은 생성자에 표시됩니다.