Наследование в 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 мне понравился больше :)