2012-03-20 2 views
3

아래 코드에서 출력은 S1S2입니다. 왜 우리는 그 결과를 얻습니까?왜 출력이 있습니까?이 경우 S1S2입니까?

public class S1 { 
    public static void main(String[] args) { 
     new S2(); 
    } 
    S1(){ 
     System.out.print("S1"); 
    } 
} 
class S2 extends S1{ 
    S2(){ 
     System.out.print("S2"); 
    } 
} 
+1

look up [constructor chaining] (http://www.leepoint.net/notes-java/oop/constructors/constructor.html). –

+0

[SSCCE] (http://sscce.org/)에 좋은 질문이 있으면 +1하십시오. –

답변

3

S2는 S1을 확장하므로 최상위 순서로 모든 생성자를 호출하는 것과 같습니다.

Java는 먼저 부모 개체 인 S1을 생성하고 생성자를 호출합니다. 그런 다음 생성자 인 S2 객체로 이동하십시오.

+1

우선 'S1'에서 'Object's' 생성자를 호출합니다. – twain249

2

명시 적으로 (super(...)를 통해) 기본 클래스의 생성자를 호출하지 않습니다 파생 클래스의 생성자는 다음 각 파생 클래스의 생성자에서 기본 클래스의 기본 생성자를 암시 적 호출

super(); 

에게있는 경우.

2

하위 클래스의 생성자에서 수퍼 클래스의 기본 생성자에 대한 암시 적 호출이 있습니다. 생성자 몸이 명시 적으로 생성자 호출 및 선언 된 생성자로 시작하지 않는 경우, 생성자 몸 원시 클래스 개체의 일부가 아닌

: 여기

은 사양에서 인용 한 것입니다 암시 적으로 은 수퍼 클래스 생성자 호출 "super();"로 시작하여 컴파일러가 인수를 취하지 않는 직접 수퍼 클래스의 생성자를 호출한다고 가정합니다.

관련 문제