인터페이스 Object
는 Java의 클래스에서 상속 됩니까?
그렇다면 인터페이스 인스턴스에서 객체 클래스의 메소드를 호출하는 방법
public class Test {
public static void main(String[] args) {
Employee e = null;
e.equals(null);
}
}
interface Employee {
}
답변
인터페이스
Object
는 Java의 클래스에서 상속 됩니까?
아닙니다. 그리고 그 문제에 대해 (클래스의 경우와 같이) 모든 인터페이스에 의해 암시 적으로 상속되는 일반적인 “루트”인터페이스는 없습니다. (*)
그렇다면 인터페이스 인스턴스에서 객체 클래스의 메소드를 호출하는 방법
인터페이스는의 각 공개 메소드에 대해 하나의 메소드를 내재적으로 선언했습니다 Object
. 따라서 equals
메소드는 이미 인터페이스에서 멤버로 암시 적으로 선언됩니다 (이미 슈퍼 인터페이스에서 상속하지 않는 한).
이것은 Java 언어 사양, § 9.2 인터페이스 멤버 에 자세히 설명되어 있습니다.
9.2 인터페이스 멤버
[…]
- 인터페이스는 직접 슈퍼가없는 경우, 그 인터페이스는 내재적 공용 추상 멤버 메소드 선언 m 시그니처와 의 리턴 형 R을 한 절 발생 t를 각각 서명 공개 인스턴스 메소드 m에 대응하는 S , 리턴 형 R 및 절 발생 t를 에서 선언 된
Object
동일한 서명, 같은 반환 유형과 호환이 절을 던졌습니다있는 방법이 명시 적으로 인터페이스에 의해 선언하지 않는 한,.[…]
이 게시물은 여기 기사로 다시 작성되었습니다 .
(*)는 존재의 개념주의 의 하위 유형이 일치하지 않는 에서 상속 : 없음 슈퍼 인터페이스 인터페이스는 참의 하위 유형입니다 Object
( . § 4.10.2 클래스 및 인터페이스 유형 중 하위 유형 ) 그들은에서 상속하지 않더라도 Object
.
답변
Object
모든 인터페이스의 수퍼 타입이다 [1]
그러나, 인터페이스는하지 않는 implements
, extends
또는, “상속” Object
.
JLS에는 Object
인터페이스 에 메소드 를 추가 하기 위한 특별한 절이 있습니다. [2]
[1] http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.10.2
[2] http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.2
답변
실제로 모든 .class
파일에는 인터페이스를 나타내는 것을 포함 하여 수퍼 클래스 필드가 있습니다.
인터페이스의 경우 항상을 가리 킵니다 java.lang.Object
. 그러나 그것은 아무것도 사용되지 않습니다.
그것을 보는 또 다른 방법은 다음과 같습니다.
interface MyInterface {
// ...
}
public myMethod(MyInterface param) {
Object obj = (Object) param;
// ...
}
여기서 캐스트 (Object) param
는 항상 유효하므로 모든 인터페이스 유형이의 하위 유형임을 의미합니다 java.lang.Object
.
답변
구현employee e = ...
하는 클래스가 있고 variable에 할당되어 있기 때문 입니다. 인터페이스를 구현하는 모든 클래스는 Object를 암시 적으로 확장하므로 사용자가 할 때 언어는의 하위 유형 인 클래스가 있음을 알고 있습니다 . employee
e
e.equals(null)
employee
JVM은 코드에 대한 런타임 검사를 수행합니다 (예 : throw NullPointerException
).
답변
인터페이스는 Object 클래스를 상속받습니다. 인터페이스 유형 참조를 통해 객체 클래스의 메소드에 액세스 할 수있는 방법
No 인터페이스는 Object
클래스를 상속하지 않지만 클래스의 모든 메소드에 대한 액세스 가능성을 제공 Object
합니다. 인터페이스의 멤버는 다음과 같습니다.
Those members declared in the interface.
Those members inherited from direct superinterfaces.
If an interface has no direct superinterfaces, then the interface implicitly
Object
class에 선언 된 각 공개 인스턴스 메소드에 해당하는 공개 추상 멤버 메소드를 선언 합니다.
m이 in으로 선언 된 경우 인터페이스가 이러한 메소드 m을 명시 적으로 선언하면 컴파일 타임 오류 final
입니다 Object
.
이제 모든 수퍼 인터페이스에에 선언 된 abstract
각 public
인스턴스 메소드에 해당하는 멤버 메소드 가 있음이 분명합니다 Object
.
출처 :
http://ohmjavaclasses.blogspot.com/2011/11/is-intreface-inherits-object-clashow.html
답변
인터페이스를 구현하는 클래스도 Object
정의에 따라 파생 됩니다.
답변
” 참조 유형은 모두 java.lang.Object에서 상속됩니다 . 클래스, 열거 형, 배열 및 인터페이스는 모두 참조 유형입니다. “
인용 : http://docs.oracle.com/javase/tutorial/reflect/class/index.html
두 번째 문장은 명확합니다.
