Я практикуюсь на экзамене и нашел образец проблемы, который полностью меня потерял. Для следующего кода, найти то, что выход:Динамическое связывание Java
class Moe {
public void print(Moe p) {
System.out.println("Moe 1\n");
}
}
class Larry extends Moe {
public void print(Moe p) {
System.out.println("Larry 1\n");
}
public void print(Larry l) {
System.out.println("Larry 2\n");
}
}
class Curly extends Larry {
public void print(Moe p) {
System.out.println("Curly 1\n");
}
public void print(Larry l) {
System.out.println("Curly 2\n");
}
public void print(Curly b) {
System.out.println("Curly 3\n");
}
}
public class Overloading_Final_Exam {
public static void main (String [] args) {
Larry stooge1 = new Curly();
Moe stooge2 = new Larry();
Moe stooge3 = new Curly();
Curly stooge4 = new Curly();
Larry stooge5 = new Larry();
stooge1.print(new Moe());
((Curly)stooge1).print(new Larry());
((Larry)stooge2).print(new Moe());
stooge2.print(new Curly());
stooge3.print(new Curly());
stooge3.print(new Moe());
stooge3.print(new Larry());
((Curly)stooge3).print(new Larry());
((Curly)stooge3).print(new Curly());
stooge4.print(new Curly());
stooge4.print(new Moe());
stooge4.print(new Larry());
stooge5.print(new Curly());
stooge5.print(new Larry());
stooge5.print(new Moe());
}
}
У меня были идеи в голове, но потом, когда я побежал Java, я получил что-то совершенно другое:
Curly 1 Curly 2 Larry 1 Larry 1 Curly 1 Curly 1 Curly 1 Curly 2 Curly 3 Curly 3 Curly 1 Curly 2 Larry 2 Larry 2 Larry 1
Первые несколько все в порядке, но тогда я действительно не понимаю. У кого-нибудь есть хорошее объяснение этой проблемы?
Благодаря
первые 3 - прямые. Если вы можете продолжить следующие 3, которые помогут. Благодаря! –
вышеуказанные изменения должны помочь. – TofuBeer
@TofuBeer - Не совсем правильно. В чистой динамической привязке stooge2.print (new Curly()) напечатал бы «Larry 2» не «Larry 1», так как Curly расширяет Ларри. (На самом деле stooge2.print (новый Ларри()) был бы лучшим примером, так как он также напечатал бы «Larry 1» вместо «Larry 2». – Robin