2011-04-27 4 views
0

Android 앱의 기반을 만들고 있습니다. 작업을 수행하는 슈퍼 클래스 구현을 호출하기 전에 하위 클래스의 onCreate 메소드에서 일부 속성을 설정해야합니다. 이렇게 나쁜 행동은 무엇입니까? 하위 클래스의 속성을 설정하려면 설정 한 메소드의 수퍼 클래스 구현을 호출하십시오. 하위 클래스의 일부 속성을 설정 한 후 메소드의 수퍼 클래스 구현을 호출합니다.

답변

1

아니요, 필자는 반드시 나쁜 습관이라고 말하지 않을 것입니다. 사실 객체 지향 언어에서 상당히 일반적입니다. 이 방법으로 생각하면 종종 수퍼 클래스 동작을 재정의하거나 확장하려고합니다. 이렇게하면 세 가지 기본 옵션이 있습니다.

  1. 수퍼 클래스 버전을 전혀 호출하지 마십시오. 예를 들어 이전 동작을 완전히 바꾸려면

  2. 수퍼 클래스 버전을 호출 한 다음 몇 가지 추가 작업을 수행하십시오. 이전 동작을 유지하고 자체 동작을 추가하려는 경우

  3. 몇 가지 추가 작업을 수행 한 다음 수퍼 클래스 버전을 호출합니다. 그런 다음 나중에 추가 작업을 수행 할 수 있습니다. 완전히 바꾸거나 다시 구현하지 않고 이전 동작에 영향을 주려는 경우. > - 2 - 당신은 1에서 이동 물론

은, 취성의 증가 금액이 완전히 #에서와 슈퍼 방법을 우회하면> 3. 한 다음 아주 작은 기회가있다가 향후 업데이트 수퍼 클래스에 코드가 손상됩니다. 수퍼 클래스 메서드를 호출하고 자신의 코드를 추가하면 수퍼 클래스의 향후 변경으로 인해 코드가 중단 될 가능성이 커집니다. 특히 코드가 수퍼 클래스 코드의 실행으로 인한 부작용에 의존하는 경우 . 마지막으로, 거기에 부르기 전에 부작용을 주입하여 수퍼 클래스 메서드에 영향을주는 코드를 추가하면 수퍼 클래스의 작성자가 수퍼 클래스 업데이트로 인해 코드가 언젠가 파손될 가능성이 커집니다 당신이 그 행동에 영향을 미치기 위해 어떤 부작용을 가졌는지 알 방법이 없으며 같은 방식으로 그들에게 계속 응답 할 의무도 없습니다.

따라서 트레이드 오프가 필요합니다. 옵션 # 3은 문제를 해결하는 가장 빠른 방법 일 수 있지만 수퍼 클래스 구현이 어떻게 동작하는지에 대한 다양한 가정에 의존하기 때문에 미래의 수퍼 클래스 변경에 의해 우연히 깨질 가능성이 높습니다. 이것이 심각한 문제인지 여부는 수퍼 클래스 변경 빈도, 의존하는 행동이 변경 될 가능성, 수정 된 사항을 수락 할 때 얼마나 많은 통제력을 가지고 있는지, 슈퍼 클래스와 서브 클래스의 코드에 대한 소유권이 있는지 여부, 옵션 # 2 또는 옵션 # 1로 전환하는 것이 얼마나 어려울 지 등이 포함됩니다.

궁극적으로 좋은 연습과 나쁜 연습의 문제는 아니며 각 옵션의 장점과 단점을 이해하고 프로젝트에 가장 적합한 옵션을 선택하는 것이 중요합니다.

+0

@artoh : 고맙습니다. 그래서 슈퍼 클래스 구현을 호출하기 전에 일부 속성을 설정하는 기본 활동을 만드는 방법이 있습니까? Utilities 클래스를 만들고 각 클래스가 대신 호출하는 메서드를 추가하는 것이 더 좋습니까? – LuckyLuke

0

내가 슈퍼 클래스 구현 작업을 수행 그것의 호출 전에 서브 클래스에서 에서 onCreate 방법의 일부 속성을 설정해야합니다 감사합니다. 그럼이게 나쁜 습관입니까?

네, 좋지 않습니다.

+0

오케이, 내가 어떻게 할 수 있는지에 대한 제안이 있습니까? – LuckyLuke

+0

@Andreas : super에 대한 호출을 통해 생성자를 통해 설정합니다. – techiServices

+0

@techiServices :하지만 정상입니까? 아니면 기본 동작에서 onCreate-method를 재정의 할 수 있습니까? – LuckyLuke

관련 문제