Czy interfejs dziedziczy po klasie Object?

0

Mając oto taki kod:

public interface Interfejs {
}

oraz

public class Main implements Interfejs {
	public String toString(){
		return "toString() z Main";
	}
	public static void main(String args[]){
		Interfejs p = new Main();
		System.out.println(p.toString());
		System.out.println(p);
	}
}

dlaczego obiekt na który wskazuje referencja p może używać metody toString(), skoro interfejs Interfejs jej nie definiuje? Czy to znaczy, że interfejs również dziedziczy metody po klasie Object?

0

Nie, po prostu każda KLASA która nie ma explicite extends dziedziczy po Object, a tym samym oczywiscie każda klasa dziedziczy po Object.

0
Shalom napisał(a):

Nie, po prostu każda KLASA która nie ma explicite extends dziedziczy po Object, a tym samym oczywiscie każda klasa dziedziczy po Object.

Ale KAŻDA, to znaczy interfejs też? Czy interfejs też jest klasą?

1

Hm w sumie ciekawe pytanie:

If an interface has no direct superinterfaces, then the interface implicitly declares a public abstract member method m with signature s, return type r, and throws clause t corresponding to each public instance method m with signature s, return type r, and throws clause t declared in Object, unless a method with the same signature, same return type, and a compatible throws clause is explicitly declared by the interface.

http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.2

Więc interfejs nie dziedziczy po Object i nie ma żadnego interfejsowego odpowiednika dla Object, ale by design każdy interfejs ma te metody.

0

Chwila...
Referencja p wskazuje na obiekt klasy Main, czyli zawiera między innymi metodę toString() z klasy Main.
Referencja p jest typu Interfejs, zatem może korzystać tylko z tych składowych klasy Main, które definiuje Interfejs.
Interfejs nie definiuję metody toString(), a jednak można odwołać się do tej metody z klasy Main, której nie definiuje Interfejs.
Hmm...

1 użytkowników online, w tym zalogowanych: 0, gości: 1