2016-07-27 2 views
0

내 개체가 인터페이스를 구현하지만 해당 메서드를 구현하지 못한다고 선언하면 코드를 컴파일 할 때 컴파일러 오류가 발생합니다. Java 컴파일러는 인터페이스의 모든 메소드를 구현하지 않았다는 것을 어떻게 알 수 있습니까?자바 컴파일러는 인터페이스의 모든 메소드가 구현되었는지 어떻게 확인합니까?

+2

그것은 인터페이스와 클래스 모두에 액세스 할 수 있습니다. 왜 몰랐을까요? – resueman

+0

이 질문은 "컴파일러가 문자열 리터럴을 int 변수에 할당 할 수 없다는 것을 어떻게 알 수 있습니까?"라는 질문과 비슷합니다. – isnot2bad

+0

@resueman 더 깊은 설명을 원합니다. 예를 들어, 인터페이스는 추상 유형이므로 형식 검사가 어떻게 수행되고 컴파일러가 나타내는 인터페이스로 이러한 검사를 수행 할 수 있습니다. – kurryt

답변

1

자바 컴파일러는 인터페이스의 모든 메소드를 구현하지 않았다는 것을 어떻게 알 수 있습니까?

컴파일하는 동안 클래스를 찾아 분석했기 때문에 클래스가 구현 한 모든 메서드를 알고 있습니다. ,

  1. 는 하나 그들의 소스 코드를 컴파일, 또는 "을 .class"파일을로드 :

    그것은 때문에 클래스의 슈퍼 클래스와 인터페이스 모두에 정의 된 모든 방법을 알고

  2. 인터페이스/클래스를 분석하여 클래스에서 구현해야하는 메소드를 파악했습니다.

그런 다음 두 가지 방법을 비교합니다. 메서드가 정확히 같을 필요는 없습니다. 예를 들어, 실제 메서드는 인터페이스에서 메서드의 반환 형식의 하위 형식을 반환 할 수 있습니다. 집합 비교에서는이를 고려해야합니다.


는 (사실, 즉,이 검사를 수행하는 하나의 방법입니다. 실제의 자바 컴파일러는 다르게 조금을 확인 할 수 있습니다.)

+0

이것은 좋은 대답입니다. 이것을 마무리하기 위해 ... Java에서 인터페이스는 잘 정의되고 상호 일관성있는 의미 체계가있는 추상 유형입니다. Java 컴파일러에는 프로그램이 언어의 유형 호환성 규칙을 준수하는지 확인하는 유형 검사기가 있습니다. 따라서 형식 검사기는 클래스에 메서드 서명이 있고 적절한 반환 유형이 있는지 확인한 다음 그렇지 않은 경우 오류를 반환합니다. 출처 : http://www.cs.columbia.edu/~aho/cs4115/Lectures/15-03-23.html – kurryt