, wenn ich rufe s1.dub (7) oder s2.dub (7) nicht funktioniert, aber es mit einer Schnur wie s2.dub („9“) arbeitet und druckt die Zeichenfolge verdoppelt AufrufPolymorphe Misunderstand
Könnte mir jemand sagen warum?
Hier ist der Code
interface Inter {
int number();
}
abstract class Abs {
static int foo = 12;
int number() { return 5; }
abstract int ace();
}
final class Sub extends Super {
Sub(int bar) { foo = bar; }
public int number() { return 10; }
int ace() { return 13; }
int dub(int i) { return 2 * i; }
}
public class Super extends Abs implements Inter {
public int number() { return 11; }
public static void main(String args[]) {
Super s1 = new Super();
Super s2 = new Sub(16);
//System.out.println(s1.dub(7)); //doesn't work
//System.out.println(s2.dub(7)); //doesn't work
//System.out.println(s1.dub("7")); //works giving 77
//System.out.println(s2.dub("7")); //works giving 77
}
int twice(int x) { return 2 * x; }
public int thrice(int x) { return 3 * x; }
int ace() { return 1; }
String dub(String s) { return s + s; }
}
Ich bin ein bisschen müde, aber ich denke, das sollte nicht mal kompilieren? –
Bearbeitet Nun, überprüfen Sie es erneut! –
s1.dub (7) kompiliert nicht, da Sie einen int-Wert übergeben, während die einzige Dub-Methode im Super-Objekt einen String erwartet. s2.dub (7) kompiliert auch nicht als, während Sie ein Sub-Objekt erstellen, das eine Methode hat, die ein int erwartet, behalten Sie es als Super, das wiederum nur eine Dub-Methode hat, die einen String erwartet . Davon abgesehen, sollten Sie auch verstehen können, warum s1.dub ("7") und s2.dub ("7") kompilieren. –