Unten ist ein Beispiel aus dem Buch Java ist auch eine Insel. Kann es sein, dass der Satz: "Das bedeutet, dass in spannung() durch Schuh.this zwar das zum Fuss-Objekt gehörende Schuh-Exemplar gemeint ist, wir aber durch die Überschreibung dennoch in der Methode aus der Klasse Fuss landen." einfach nur falsch ist?
Wir landen ja in der Schuh Methode und nicht in der Methode aus Fuss.
Beispiel In der Klasse Schuh erweitert die innere Klasse Fuss den Schuh und überschreibt die Methode wasBinIch().
Listing 6.74 Schuh.java
Legen wir in der main()-Funktion ein Objekt der Klasse Fuss an, dann landen wir in der Klasse Fuss und nicht in Schuh. Das heißt, die Ausgabe ist:
Ich bin der Schuh des Manitu
Das bedeutet, dass in spannung() durch Schuh.this zwar das zum Fuss-Objekt gehörende Schuh-Exemplar gemeint ist, wir aber durch die Überschreibung dennoch in der Methode aus der Klasse Fuss landen. Vor 1.2 kam als Ergebnis die erste Zeichenkette heraus. Das Ergebnis unter JDK 1.2 ist analog zu ((Schuh)this).wasBinIch().
Wir landen ja in der Schuh Methode und nicht in der Methode aus Fuss.
Beispiel In der Klasse Schuh erweitert die innere Klasse Fuss den Schuh und überschreibt die Methode wasBinIch().
Listing 6.74 Schuh.java
Code:
public class Schuh
{
void wasBinIch()
{
System.out.println( "Ich bin der Schuh des Manitu" );
}
class Fuss extends Schuh
{
void spannung()
{
Schuh.this.wasBinIch();
}
@Override
void wasBinIch()
{
System.out.println( "Ich bin ein Schuh.Fuss" );
}
}
public static void main( String[] args )
{
new Schuh().new Fuss().spannung();
}
}
Ich bin der Schuh des Manitu
Das bedeutet, dass in spannung() durch Schuh.this zwar das zum Fuss-Objekt gehörende Schuh-Exemplar gemeint ist, wir aber durch die Überschreibung dennoch in der Methode aus der Klasse Fuss landen. Vor 1.2 kam als Ergebnis die erste Zeichenkette heraus. Das Ergebnis unter JDK 1.2 ist analog zu ((Schuh)this).wasBinIch().