Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich hab eigendlich nur eine grundsätzliche Frage.
Es geht um Polymorphie und ich weiß eigendlich auch wie das funktioniert.
Mich würde eine genau Erklärung interessieren warum folgender Code "Top.mth" ausgibt.
Java:
public class main {
public static void main(String[] args) {
byte b = 11;
Top t;
t = new Sub();
t.mth(b);
}
}
class Top {
public void mth(int v){
System.out.println("Top.mth");
}
}
class Sub extends Top{
public void mth(byte v){
System.out.println("Sub.mth");
}
}
class Subsub extends Sub{
public void mth(int v){
System.out.println("Subsub.mth");
}
}
Eigendliche müsste doch die "mth(byte v)" aus der "Klasse Sub" aufgerufen werden.
Da müsste ich nun selbst eben fix nachschauen ob der cast automatisch stattfindet, was passiert denn wenn du den cast weglässt und den code mal in einen try/catch block packst ? wird eine CastException geworfen oder der Code normal ausgeführt ? falls ja findet der Cast automatisch statt, wenn nicht musst du diesen manuell angeben.
du hast die Variable t als 'Top' definiert, demzufolge kannst du auch nur methoden-signaturen aus 'Top' aufrufen, auch wenn der implementierte Klasse eine treffendere methoden-signatur besitzt.
Wenn du die Methode ueberschreibst anstatt sie nur zu ueberladen wird es funktionieren.
Java:
class Top {
public void mth(int v){
System.out.println("Top.mth");
}
public void mth(byte v){
System.out.println("Top.mth");
}
}
die Methode ueberschreibt, also die Signatur identisch ist wie
Code:
Top
.
Wenn du die Signatur von
Code:
Top
aenderst, z.B.
Code:
public void mth(byte v)
wird es auch nicht mehr funktionieren.
Ich wuerde beim Design meiner Klassen entweder Method-Overload oder Method-Override verwenden und nicht beides zusammen. Wie man so schoen an deinem Beispiel sieht kann der Code schnell komplex werden.
Das hat mir geholfen! Also es wird immer versucht die Methode der Superklasse aufzurufen. Wird diese überschrieben kann die Methode der Superklasse nicht mehr gefunden werden und es wird die der Unterklasse benutzt.