2017-11-19 1 views
0

그래서이 코드가 있습니다object.super()는 무엇을합니까? 국가를 만드는 방법?

public class A { 
    private State _state; 

    public abstract class State { 
     protected void setState(State newState) { 
      _state = newState; 
     } 
    } 

    public A() { 
     _state = new AbstractState(this); 
    } 
} 

public abstract class AbstractState extends A.State { 
    AbstractState(A a) { 
     a.super(); 
    } 
} 

을 그리고 나는 그것이 어떻게 작동하는지 이해하기 힘든 시간을 보내고 있습니다.

따라서 A object이 생성되면 A object을 매개 변수로 사용하여 AbstractState 개체가 생성됩니다. 그 A object을받는 AbstractState 생성자는 a.super()을 호출합니다.

제 생각에 a.super()A a이라는 수퍼 클래스의 construtor를 호출합니다. 바로 Object입니다. 그래서 요점은 무엇입니까?

나는 AbstractState이 추상 클래스라는 것을 알고있다. 하위 클래스는 다음과 같습니다.

public class StateOne extends AbstractState { 
    StateOne(A a) { 
     super(a); 
    } 
} 

질문은 여전히 ​​있습니다.

+0

object.super()에 대한 설명이 없습니다. 그것은 super()와 동일하지만 객체를위한 것입니까? 아니면 Object가있는 클래스의 슈퍼입니까? – Myntekt

+0

그것은'StateOne'의 수퍼 클래스의 생성자를 호출합니다. –

+0

나는 그것이 AbstractState에서 무엇을 의미 하는지를 의미했다. 그래서'a.super()'에 – Myntekt

답변

4

내 이해에서 a.super()은 Object 인 A a의 수퍼 클래스 생성자를 호출합니다. 그래서 요점은 무엇입니까?

super()이 아닌 a.super()으로 작성해야하는 이유는 무엇입니까?

먼저, A 또는 수퍼 클래스 A의 생성자를 호출하지 않습니다. super(...) 생성자에서 을 호출하면 항상은 인스턴스를 생성하는 클래스의 직접적인 수퍼 클래스에있는 생성자를 의미합니다. 이 경우 수퍼 클래스는 내부 클래스 A.State입니다. a.super() 실제로 말하는

은 "내 인스턴스을 둘러싸는 나의 슈퍼 클래스 생성자 a전화"입니다.

수퍼 클래스가 내부 클래스이기 때문에 비정상적인 구문이 필요하며 내부 클래스가 인스턴스화 될 때 내부 클래스 인 이 무엇인지 알아야합니다. 하여 예에서

State 이너 클래스 (즉하지 static) 따라서 일부 인스턴스의 개인 _state 변수 둘러싸 클래스 (A)을 볼 수 setState 방법으로서 선언된다. JVM이 인 인스턴스가 포함 된 을 알 수 있도록 a.super()이 필요합니다.

+0

브릴리언트. 답변 해주셔서 감사합니다. – Myntekt

관련 문제