2013-08-27 3 views
1

마지막 수퍼 클래스를 호출하는 메서드를 전파하기 위해 super에서 메서드를 재귀 적으로 호출하려고합니다. 이 의사 코드는 내가하고 싶은 것을 알려주지 만, 물론 자바에서는 컴파일되지 않습니다.수퍼 클래스에서 재귀 함수 호출

public MyClass { 

    protected void method() { 

     // do something on this level 

     if (super instanceof MyClass) { 
      MyClass superLevel = (MyClass) super; 
      superLevel.method(); 
     } 
    } 
} 

어떻게이 동작을 수행 할 수 있습니까?

+0

이 코드는 수퍼 클래스에 있어야합니다. 수퍼 클래스에서는'if (MyClass의이 인스턴스)'를 쓸 수 있지만 IMHO에서는 디자인 결함을 나타냅니다. 수퍼 클래스는 서브 클래스를 알지 못합니다. –

+1

유일한 옵션은 각 레벨에서'super.method()'호출을 추가하는 것입니다. 'super'를 사용하여 직접 슈퍼 클래스 메서드 만 호출 할 수 있습니다. –

답변

3

당신은 사용할 수 있습니다

public class MySuperClass { 
    protected void method() { 
     // Whatever you want to do in super class 
    } 
} 

public class MyClass extends MySuperClass { 
    @Override 
    protected void method() { 
     // Whatever you want to do in this specific class 

     // Call super.method 
     super.method(); 
    } 
} 

당신은 클래스의 체인에이 방법을 사용할 수 있습니다.

+1

설명없이 왜 downvoting? – BobTheBuilder

+0

그냥 무시하고, 거기에 유효하지 않습니다. 도와주세요 :) –

1

당신은 모든 수업을 편집 할 수있을 때까지 그렇게 할 수 없습니다. 직접적인 부모 메소드 만 직접 사용할 수 있습니다.

부모를 편집 할 수있는 경우 각 레벨에서 super.method()으로 전화하십시오.

관련 문제