Не понимаю принцип работы upcast.
class Bird
{
int age = 2;
public void move() {
System.out.println("Any ways");
}
}
class Strauss extends Bird
{
int age=3;
public void move() {
System.out.println("Run "+age);
}
}
public class Main {
public static void main(String args[]) {
Bird s = new Strauss();
s.move();//Run 3
System.out.println(s.age)//2
}
}
Собственно, вопрос. Почему s.age = 2 (Берет от Bird), но если использовать эту переменную в методе move() класса Strauss, то она подтягивает age от Strauss и в итоге получается "Run 3".
Как-то глупо вопрос задал. В общем, если вызывать age напрямую - то "2", если через метод - то "3". Почему так?
Наследование распространяется на методы, но не членов класса - у вас по сути два члена класса Bird.age и Strauss.age, которые перекрывают друг друга. Если бы вы сделали так:
class Bird
{
public int age = 2; //по хорошему надо protected
public void move() {
System.out.println("Any ways");
}
}
class Strauss extends Bird
{
public void move() {
System.out.println("Run "+age);
}
}
то ответ в обоих случаях был бы один и тот же.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости