HASHCODE 관련해서 질문이 있습니다.
조회수 1294회
HASHCODE를 공부하던 중 궁금한 점이 하나 생겨 질문합니다.
위에 코드를 보시면 hashCode()를 오버라이딩 하고 있는데
return hash.hashCode()로 String hash를 int형으로 전환시켜 return 시키는게 가능하더라구요.
어떻게 오버라이딩 하기 전의 hashCode()를 불러올 수 있는건가요?
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
return hash.hashCode();
이 부분이 궁금하신건가요?
이 코드는 super의 hashCode를 가져오는게 아닙니다.
String hash = name + id + job; return hash.hashCode();
바로 윗줄에서 생성한 String 타입 인스턴스의 hashCode를 가져오는거죠. 여기서의 오버라이딩은 메서드 이름을 덮어쓰겠다는것 외엔 의미가 없습니다.
질문하실때 코드는 왠만하면 스크린샷 말고 텍스트로 작성해주세요. 코드블럭 사용도 잊지 마시구요.
- 답변 감사합니다. 제가 질문하는 게 이번이 처음이라 잘몰랐습니다. 죄송합니다. 알 수 없는 사용자 2017.9.7 16:26
- 그런데 아직 의문이 남는게, 제가 int hashCode() 메소드를 만들어 Object 클래스의 hashCode()을 오버라이딩 하였는데, 어떻게 Object 클래스의 hashCode()를 사용할 수 있는건지요? 이 점을 아직도 모르겠네요. 알 수 없는 사용자 2017.9.7 16:34
- hash.hashCode()에서 hashCode()는 쓰니분이 오버라이딩 하겠다 선언한 메서드가 아니라 String 클래스에 선언된 메서드입니다. 누가 소유한 메서드인지 헷갈리시는것 같은데요. String은 객체 타입이며 접근연산자 온점(.)은 피연산자가 소유한 자산에 접근하는 연산자라는걸 생각해보세요. 편집요청빌런 2017.9.7 16:50
- 아 그렇군요. 설명 감사합니다. 덕분에 이해할 수 있었습니다. 알 수 없는 사용자 2017.9.7 18:04
- String 클래스의 선언된 메소드를 생각못하고 있었네요. 정말 감사합니다. 알 수 없는 사용자 2017.9.7 18:07
-
오버라이딩 하기 전의 hashCode()라 함은, 부모클래스의 메소드, hashCode를 말씀하시는건가요? 부모클래스의 메소드는
super.메소드명(this)
와 같이 호출할 수 있습니다. 이 경우에는
super.hashCode(this)
겠네요.-
(•́ ✖ •̀)
알 수 없는 사용자
- 답변 감사합니다. 그런데 제가 궁금했던 점은 super 을 사용하지 않고 위에 코드와 마찬가지로 hash.hashCode()를 써도 부모 클래스의 메소드가 사용이 되더라고요. 그 부분이 궁금해서 질문을 남겼습니다. 알 수 없는 사용자 2017.9.7 11:09
-
댓글 입력