Есть 4 класса:
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 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 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 Tester {
public static void main(String[] args){
Lower a = new Lower(1);
Middle b = a;
Upper c = new Middle(5);
System.out.println(a.show());
System.out.println(b.show());
System.out.println(c.show());
a.set(c);
b.set(a);
c.set(b);
System.out.println(a.show());
System.out.println(b.show());
System.out.println(c.show());
}
}
Я весьма смущен выводом, данным 6 операторами print в классе tester.Выходные данные: 1, 1, 5, 1, 1, 1, но я подумал, что это должно быть 1, 1, 5, 5, 5, 5.Ясно, что моя проблема заключается в понимании того, почему переменная 'a' не установлена в 5 на следующей строке, когда все строки после нее, кажется, делают это.
a.set(c);
Поскольку хотя 'c' былообъявленный как тип Upper, на самом деле это переменная типа «Middle», так как в тестере было установлено значение «Middle» переменной «b».Таким образом, метод 'set', который будет использоваться, должен быть тем же классом 'Middle'.По этой логике я думал, что значение «а» будет установлено на «5», но кажется, что оно остается «1».Но я не могу понять, почему.
Любая помощь будет высоко ценится!