Java Reference
In-Depth Information
class X1
{
public void m(A a)
{
System.out.println("X1.m(A)");
}
}
class X2 extends X1
{
public void m(B b)
{
System.out.println("X2.m(B)");
}
}
Im folgenden Beispiel dagegen handelt es sich um Überschreiben, da in der abgeleiteten
Klasse Y2 die Methode m mit genau derselben Signatur defi niert wird, wie sie in der Basis-
klasse Y1 schon vorhanden ist:
class A {}
class B extends A {}
class Y1
{
public void m(A a)
{
System.out.println("Y1.m(A)");
}
}
class Y2 extends Y1
{
public void m(A a)
{
System.out.println("Y2.m(A)");
}
}
Um den unterschiedlichen Eff ekt zwischen Überladen und Überschreiben darzustellen, be-
trachten wir zunächst die folgenden Zeilen, in denen es um die überladene Methode m geht:
X2 x2 = new X2();
x2.m(new B());
X1 x1 = x2;
x1.m(new B()); //entscheidender Aufruf: X1.m
Im obigen Beispiel wird ein X2-Objekt erzeugt. Ru man die Methode m mit einem Objekt
der Klasse B als Parameter auf, so wird das m aus X2 aufgerufen. Wiederholt man den-
selben Aufruf für dasselbe Objekt, verwendet aber eine Referenz auf das X2-Objekt vom
Typ X1, so wird das m aus X1 verwendet.
Anders ist es beim Überschreiben:
Y2 y2 = new Y2();
y2.m(new B());
Y1 y1 = y2;
y1.m(new B()); //entscheidender Aufruf: Y2.m
 
Search WWH ::




Custom Search