почему выводятся разные поля классов?

public class Solution {
    int i = 0;
    public static class B extends Solution {
        int i = 1;
    }
    public static void main(String[] args){
        Solution f = new B();
        B d = new B();
        System.out.println(f.i);
        System.out.println(d.i);
    }
}

Ответы (1 шт):

Автор решения: Вадим

К счастью, а может и к сожалению в Java нельзя переопределять значения поля (на самом деле вы просто создаете новое поле с таким же именем), как это делается с методами. Поэтому если тип переменной Solution то и поле будет браться из реализации Solution.

public class Solution {
    int i = 0;
    int get(){
        return i;
    }

    public static class B extends Solution {
        int i = 1;
        int get(){
            return i;
        }
    }

    public static void main(String[] args) {
        Solution f = new B();
        B d = new B();
        System.out.println(f.i);
        System.out.println(d.i);
        System.out.println("-----------");
        System.out.println(f.get());
        System.out.println(d.get());
    }
}
→ Ссылка