Я не совсем понимаю про процедуру расширения класса. Учитывая следующий фрагмент кода, почему вывод равен 32?Java-процедуры расширения абстрактного класса
class Rts {
public static void main(String[] args) {
System.out.println(zorg(new RtsC()));
}
static int zorg(RtsA x) {
return x.f()*10 + x.a;
}
}
abstract class RtsA {
int a = 2;
int f() { return a; }
}
class RtsB extends RtsA {
int a = 3;
int f() { return a; }
}
class RtsC extends RtsB {
int a = 4;
}
Понял. Так ясно. Спасибо – codemonkey
У меня есть еще один вопрос об этом. Поскольку я вызываю zorg (новый RtsC()) в своей основной функции, как вы сказали, zorg знает только, что x имеет тип RtsA, как мы используем этот x для вызова f()? Мое понимание - это задача RtsC upcast для RtsA автоматически. Confused – codemonkey
Если вы переопределите метод в подклассе, его всегда вызывает метод переопределения, вызываемый. –