2011-08-23 6 views
9

사람이 코드 경우 말해 줄 수 : @Override 주석

public class OvTester { 
    @Override 
    public int hashCode() { 
     return toString().hashCode(); 
    } 
} 

OvTester 클래스의 toString 방법은 수퍼 클래스에서 toString 방법을 우선 결정합니다.

이것이 사실인지 알고 싶습니다. 그렇다면 어떻게 작동합니까? 그것이 사실이 아니라면

,이 사실이다 :

"수퍼 클래스에서 같은 이름의 메소드를 오버라이드 (override) 할 필요 OvTester에서 hashCode() 방법?"

정확하지 않은 경우 올바른 내용은 무엇입니까?

+1

클래스에 수퍼 클래스가없는 것처럼 보이므로이 작업은 실패합니다. – Sirs

+9

물론 슈퍼 클래스 - java.lang.Object'를 가지고 있습니다. – Bozho

답변

13

방법 오버라이드가 발생 컴파일 할 수 없게됩니다

@Override 
public void equals(Object ob){ 

} 

를 무시하려고합니다.그래서 여기 당신이 hashCode()을 재정의

하지 toString()

@Override 주석은 선택 사항입니다 (하지만 아주 좋은 것)이이 무시 될 것으로 예상하고 있음을 나타냅니다. 잘못 입력했거나 잘못 입력 된 매개 변수가 있으면 컴파일러에서 경고합니다.

그래서 예, 제 2 문은 사실이다 (이 경우 슈퍼 클래스는 java.lang.Object입니다)

2

나는이 사실이라면 알고 싶습니다, 만약 그렇다면 어떻게 작동하는지?

아니요, 정확하게는 아닙니다.

@Overrides 주석은 "이 방법은 슈퍼 클래스에서 같은 이름와 방법 을 무시"고 말했다.

OvTester 인 경우 을 hashCode으로 대체합니다.

사실이 아니다,이 사실 인의 경우 : 수퍼 클래스에서 같은 이름의 메소드를 오버라이드 (override) 할 필요 OvTester에서 hashCode() 방법은?

예. 그것이 정확하게 작동하는 방법입니다. 한 가지 방법은 (당신이 당신의 예에있어 거의 무엇을) 다른 방법을 호출하는 것보다 다른 작업을 수행하지 않습니다


은은 일반적으로 delegate method라고합니다. 아마도 이것이 당신이 이것을 혼란스럽게 만들었을 것입니다.

0

아니요, 이는 hashCode() 메서드가 재정의되고 있음을 나타냅니다. 컴파일러는 컴파일 타임에 hashCode()가 실제로 오버라이드되는 메소드 (그 시그니처 포함)인지 검사합니다.

0

@Override은 컴파일러가 실제로 메서드를 재정의하는지 확인하는 것입니다.

당신이 당신이 sublcass에서 동일한 서명을하는 방법을 재정의 할 때

1

@Override 주석이 무엇을 "결정"하지 않습니다. 이 메소드는, 주석 첨부 메소드가 수퍼 클래스 또는 인터페이스 메소드를 오버라이드 (override)하고 있지 않는 경우에 에러를 발생 시키도록 (듯이) 컴파일러에 지시하는 플래그입니다. 개발자가 정성을 유지하는 데 도움이되는 도구입니다. 이러한 특정 경우

, 단순히 OvTester에서 hashCode() 구현 Object에 정의 hashCode() 메소드를 재정의되는 것을주의한다. 이것은 toString()과 전혀 관련이 없으며 hashCode() 메서드에서 수퍼 클래스의 toString() 메서드를 호출하면 toString()을 무시하는 것과 같지 않습니다.

이 사실입니까? OvTester의 hashCode() 메서드는 superClass에서 동일한 이름 메서드를 재정의해야합니까? 주석이 주석 메소드의 서명과 일치 슈퍼 클래스의 재정의 hashCode() 방법이없는 경우 컴파일러는 오류를 발생시킬 것이라는 의미에서 참으로 사실이다

.

0

그 코드는 Object 클래스의 hashCode() 메소드를 오버라이드합니다. toString() 메서드는 여전히 원래 구현되어 있습니다.

은 다음 마십시오 toString() 무시하려면 :

@Override 
public String toString() { 
    //Your own toString() implememntation here 
} 

만큼 자식 클래스의 메소드가 상위 클래스의 방법, 방법에서와 동일한 이름과 서명이로 부모 클래스가 이 아닌 개인은 무시됩니다 (주석이 있는지 여부에 관계없이 @Override)