2016-07-11 1 views
2

제목이 말하는대로입니다.모든 하위 클래스 (들)의 생성자 코드 다음에 실행할 생성자 코드를 삽입 할 수있는 방법이 있습니까?

서브 클래 싱을 위해 열려있는 클래스를 만들었다 고 가정합니다. 이제는 내가 말한 클래스의 일부로 (그리고 모든 서브 클래스의) 건설 과정에서 의무적으로 실행하고자하는 코드가 있다고 가정합니다. 그러나, 나는이 코드가 건설 과정의 시작 부분에 실행되는 것을 원하지 않는다. 나는이 코드가 맨 마지막에 항상 실행되고 있음을 확신하고 싶다. 즉 이후은 하위 클래스의 생성자에 포함 된 모든 코드입니다.

나는 이것이 대답이없는 문제라고 생각하지만, 그렇지 않은 기회가되면 아무도 도움을 줄 수 있습니까?

+2

@Compass'super (...)'(및'this (...)')는 생성자의 첫 번째 행에만 나타날 수 있습니다. –

+0

너무 일찍 커피를 갖자. = – Compass

+5

하위 클래스를 제어 할 권한이 없습니다. 하위 클래스 작성자의 재량에 달려 있습니다. – duffymo

답변

-1

부모 클래스를 이와 같이 설정할 수 있습니까?

public abstract class Parent { 
    public Parent() { 
     initialize(); 
     postConstruct(); 
    } 

    // Children's initialization logic 
    protected abstract initialize(); 

    private final postConstruct() { 
     // Code after initialization 
    } 
} 
+0

생성자에서 하위 클래스 메서드를 호출하지 마십시오. 이것은 서브 클래스에서'final' 필드를 사용하지 못하게합니다. 체인의 모든 서브 클래스에 대해'initialize'를 정의 할 수 없습니다. –