2010-07-25 2 views
3

주석을 구현 클래스 메소드에 넣으시겠습니까? 그것은 어떤 목적을 위해 봉사 하는가? 잘못 입력했거나 가지고 있지 않으면 컴파일 오류입니다.@Override on Implementation

답변

3

구현 된 인터페이스에 정의 된 메소드에 주석 달기를 요청하거나 수퍼 클래스에서 abstract으로 가정합니다. 이 경우 메소드 서명의 오타가 @Override의 유무에 관계없이 컴파일 오류가 발생합니다. 그러나, 주석은 인터페이스를 구현하는 것으로 메소드를 명시 적으로 표시하는 데 여전히 도움이된다고 생각합니다. 인터페이스가 변경된 경우 모든 구현 방법에 대해 @Override 개의 주석을 사용하면 어떤 메소드 서명이 변경되어 업데이트해야하는지 정확히 알 수 있습니다.

그의 대답에서 언급 한 mklhmnn과 같이 인터페이스에서 메소드가 제거되면 구현 클래스의 @Override 주석은 컴파일 오류를 발생시킵니다. 주석이 없으면 인터페이스에서 메소드가 제거되어 미묘한 버그가 발생할 수 있음을 알지 못할 수도 있습니다.

4

오히려 유용합니다. @Override으로 주석 된 메소드가 수퍼 클래스의 메소드를 실제로 대체하지 않으면 컴파일 오류가 발생합니다. 당신이 클래스 Foo을 가지고있는 경우

예를 들어, 당신은 방법을 만들 :

@Override 
public boolean equals (Foo foo) { ... } 

는 당신은 equals (Foo foo)이 푸의 슈퍼 클래스의 모든 메소드를 오버라이드 (override)하지 않는 것을 당신에게 말할 것이다 컴파일시 오류가 발생합니다 .

IDE의 일부 코드 생성 기능을 사용하면 최신 IDE (예 : IntelliJ)가이 주석을 자동으로 추가합니다.

+0

나는 equals (Object)와 equals (Blah)가 @Override가 주요한 (그러나 발견하기 힘든) 프로그래머 오류를 방지하는 방법에 대한 가장 좋은 예라고 생각합니다. – Thien

10

메소드를 재정의 할 때이 주석을 사용할 필요는 없지만 오류를 방지하는 데 도움이됩니다. @Override으로 표시된 메소드가 수퍼 클래스 중 하나의 메소드를 올바르게 대체하지 못하면 컴파일러는 오류를 생성합니다.
더 빨리 실패하면 나중에 오류를 잡으십시오. 나중에 hashcode()이라고 써 있지만 나중에 hashCode()이라고 써야합니다. @Override은 나중에 문제를 빨리 발견하는 데 도움이됩니다.

비슷한 질문입니다. should-i-add-an-override-annotation-when-implementing-abstract-methods?

when-do-you-use-javas-override-annotation-and-why?

    • 또한 this 참조.

  • 1

    메소드를 @Override로 표시하면 API가 변경되면 컴파일 오류가 발생하므로 더 이상 수퍼 메소드를 사용할 수 없습니다. 어쩌면 그것이 이유 일 것입니다.

    2

    사용하지 않았고 문제가 발생하지 않았습니다. 왜 갑자기 모든 사람들이 그것을 사용하기 시작했는지 모르겠습니다 (이클립스도 사용하지 않습니다).

    리팩터링은 문제가되지 않으며 IDE가 확인합니다.

    @Override는 코드의 가독성을 높이는 데 도움이 될 수 있습니다. 그래야 컴파일러가 아니라 인간의 존재를 분명히 알 수 있습니다. 내 IDE가 그래픽 방식으로 재정의 메서드를 표시하지만, 그다지 눈에 띄는 것은 아니지만 요점은 도구가 자동으로 우리를 위해 할 수있는 것입니다.

    1

    Javadoc이 다른 곳에 있다는 사실을 알리는 것이 좋다고 생각합니다. 잊지 않았습니까?