Проблема с кодированием с наследованием и затенением переменных в JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблема с кодированием с наследованием и затенением переменных в Java

Сообщение Anonymous »

У меня возникла проблема с этим кодом, который содержит класс Counter, класс MyCounter1 и класс MyCounter2 в Java;
Мне интересно, почему два результата в основном методе в
output 1:

cnt1: 2 cnt2: 2
cnt1: 5 cnt2: 0

output 2:
cnt1: 3 cnt2: 3
cat1: 5 cnt2: 0

Насколько я понял, когда я вызываю конструктор mycounter1 в первой строке кода (Counter m = new myCounter 1();) в основном методе, я вызываю конструктор сначала базовый класс Counter, который вызывает метод inc().
поскольку метод inc() перезаписан в классе myCounter1, мне придется добавить 2 к cnt1 и cnt2.
поскольку мой cnt1 равен 5, почему результат для cnt1 по-прежнему равен 2, а не 5+2=7?
и откуда берется второй результат с cnt=5 и cnt=0 ?class Counter {
int cnt1 = 5;
int cnt2;

void inc() {
cnt1 = cnt1 + 1;
cnt2 = cnt2 + 1;
}

public Counter() {
inc();
cnt1 = cnt2 = 0;
}
}

class MyCounter1 extends Counter {
int cnt1 = 5;

void inc() {
cnt1 = cnt1 + 2;
cnt2 = cnt2 + 2;
System.out.println("cnt1: " + cnt1 + " cnt2: " + cnt2);
}

public MyCounter1() {
System.out.println("cnt1: " + cnt1 + " cnt2: " + cnt2);
}
}

class MyCounter2 extends MyCounter1 {
int cnt1;

void inc() {
cnt1 = cnt1 + 3;
cnt2 = cnt2 + 3;
System.out.println("cnt1: " + cnt1 + " cnt2: " + cnt2);
}
}

public static void main(String[] b) {
Counter m = new MyCounter1(); ``
m = new MyCounter2();
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... ng-in-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»