Мне трудно понять решение данного вопроса. Я не могу понять на каждом шагу, какой из методов класса вызывается.
Я попытался составить список объявленных типов a, b, c и фактических типов, а затем попытался выбрать переопределенные или перегруженные методы, но это сложно.
class Upper {
private int i;
private String name;
public Upper(int i) {
name = "Upper";
this.i = i;
}
public void set(Upper n) {
i = n.show();
}
public int show() {
return i;
}
}
class Middle extends Upper {
private int j;
private String name;
public Middle(int i) {
super(i + 1);
name = "Middle";
this.j = i;
}
public void set(Upper n) {
j = n.show();
}
public int show() {
return j;
}
}
class Lower extends Middle {
private int i;
private String name;
public Lower(int i) {
super(i + 1);
name = "Lower";
this.i = i;
}
public void set(Lower n) {
i = n.show();
}
public int show() {
return i;
}
}
class Tester {
public static void main(String[] args) {
Lower a = new Lower(1);
Middle b = a;
Upper c = new Middle(5);
a.set(c);
b.set(a);
c.set(b);
System.out.println(a.show());
System.out.println(b.show());
System.out.println(c.show());
}
}
Что печатается в результате System.out.println(a.show()); после заданных команд? Ответ 1
Что печатается в результате System.out.println(b.show()); после заданных команд? Ответ 1
Что печатается в результате System.out.println(c.show()); после заданных команд? Ответ 1
Я не понимаю, почему ответы на все эти вопросы равны 1. Также я не могу сказать, какой класс переопределяет или перегружает методы, которые "a.set(c); b.set(a); c.set(b); " использует. Подробное объяснение было бы очень полезно.
1
? Путем отладки вы можете пройтись по своему коду и сразу же увидеть, какие значения передаются, какие хранятся в полях... и т. д. - person Lino   schedule 24.04.2019