Когда я вызываю s1.dub (7) или s2.dub (7), он не работает , но вызов его строкой типа s2.dub ("9") работает и печатает удвоенную строкуPolymorphic Misunderstand
Может ли кто-нибудь сказать мне, почему?
Вот код
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; }
}
Я немного устал, но я думаю, это даже не нужно компилировать? –
Отредактировано Сейчас, повторите проверку! –
s1.dub (7) не будет компилироваться, поскольку вы передаете значение int, в то время как единственный метод dub в объекте Super ожидает String. s2.dub (7) также не будет компилироваться, поскольку при создании объекта Sub, который имеет метод, ожидающий int, вы сохраняете его ссылкой как супер, который, опять же, имеет только метод dub, ожидающий строку , При этом вы также должны понимать, почему скомпилируются s1.dub («7») и s2.dub («7»). –