Наследование в java и переменные

Почему в Java 16, выводом для кода

public class C extends A2 {
    public int a = 100;
    public int c = 300;
    
    {
        a = 500;
    }
    
    public void printC() {
        System.out.println("c = " + c);
    }    
    
    public static void main(String args[]) {
        C c = new C();
        c.printC();
        c.printA2();
        c.a = 600;
        c.printA2();
        System.out.println("c.a = " + c.a);
    }
}

class A2 {
    public int a = 1;
    public void printA2() {
        System.out.println("a = " + a);
    }
}

Будет

c = 300
a = 1
a = 1
c.a = 600

И можно ли через printA2() вывести измененное значение? Я ожидал увидеть

c = 300
a = 500
a = 600
c.a = 600

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

Автор решения: Igor

У класса С уже есть поле а, унаследованное от А.

Уберите строчку

public int a = 100;

из C, и увидите то, что ожидали.

→ Ссылка
Автор решения: kideath

Поразмыслив, такой код сделал то, что я хотел...

public class C extends A2 {
    @Override
    public void printA2() {
        super.a = this.a;
        super.printA2();
    }    
    
    public int a = 100;
    public int c = 300;
    
    {
        a = 500;
    }
    
    public void printC() {
        System.out.println("c = " + c);
    }    
    
    public static void main(String args[]) {
        C c = new C();
        c.printC();
        c.printA2();
        c.a = 600;
        c.printA2();
        System.out.println("c.a = " + c.a);
    }
}

class A2 {
    public int a = 1;
    public void printA2() {
        System.out.println("a = " + a);
    }
}

Но ответ пользователя Igor мне понравился больше :)

→ Ссылка