2011-04-14 5 views
1

"Hello, Android"를 읽을 때 문제가 있음을 확인했습니다.Android 이벤트 핸들러에서 수퍼 콜을 어디에 넣어야합니까?

 
{ 
super.onCreate(..); 
... 
... 
} 

그러나 onSizeChanged()는 다음과 같습니다 :

 
{ 
... 
... 
super.onSizeChange(); 
} 

그리고 그는 (의 onDraw에서 슈퍼를 호출하지 않습니다 그가 활동에에서 onCreate()를 구현하는 경우처럼

, 그것은 보인다).

어디에서 super call 문을 사용해야합니까? Android의 문서에서 어디서 답을 찾을 수 있습니까?

답변

2

서브 클래스의 오버라이드 된 메소드에서, 보통은 super.methodname()의 위치가 해당 메소드의 첫 번째 것이다 (예 : onCreate()). 그러나 때로는 super를 호출하기 전에 추가 단계를 수행해야하므로 onSizeChanged() 메서드 에서처럼이 작업을 수행해야합니다. 슈퍼 콜은 다른 기준에 의해서가 아니라이 기준에 의해 결정됩니다.

+0

나는이 기준을 알고있다. 그러나 슈퍼를 호출하기 전이나 후에 단계를 결정하는 방법은 무엇입니까? super.method() 전에 수행 할 수없는 작업은 무엇입니까? –

+0

일부 정리 또는 애셋로드가 필요한 경우 디자인에서 onSizeChanged() 메서드를 사용할 수 있습니다. 그런 다음 수퍼 호출 전에 수행 할 수 있습니다. 그러나 그 클린업 작업이 부모 클래스에 더 적합하다면, 그것을 옮길 것입니다. 차이점을 보시겠습니까? 어떤 점에서는 super를 호출하기 전에 부모 클래스에서 이러한 단계가 더 나은지 생각한 후 하위 클래스 onSizeChanged() 메서드를 작성하는 것이 좋습니다. 당신은 어렵고 빠른 규칙을보고 있을지도 모르지만 어떤 것도 없습니다. 항상 "항상"이 아니라 "대부분의"시간을 적용하는 소프트웨어 개발에 대한 일반적인 지침이 있습니다. – omermuhammed

2

많은 경우에,이 질문에 대한 유용한 대답은 사물의 웅대 한 계획에서 오버 라이딩 된 기능이 어디에서 발생하는지 생각할 때입니다.

이니셜 라이저로 동작하는 항목을 호출하는 경우 보조 클래스를 초기화하기 전에 기본 클래스를 초기화해야하기 때문에 super 호출은 처음에는 (usuall) 호출해야합니다.

정리 루틴으로 작동하는 항목을 호출하는 경우 super 호출은 (일반적으로) 끝까지 와야합니다. 수퍼 클래스가 스스로 정리하기 전에 모든 부분을 정리해야하기 때문입니다.

임의의 시간에 걸려 오는 호출의 경우에는 재정의 된 호출의 특성에 따라 다릅니다. 전에 전에 프레임 워크가 계산을 수행하므로 결과에 영향을 미칠 수 있으므로 끝에 super 호출이 필요합니다. 수퍼 클래스의 계산에 기반하여 계산을 수행하려면 super 호출이 처음에 있어야합니다.

요약하면 이에 대한 고정 규칙은 없습니다. 재정의하려는 특정 메소드의 기능에 따라 다릅니다.

관련 문제