Проблемы с пониманием перегруженного супер звонка

null означает, что нет значения, а 0 - нет, если вы видите 0, вы не знаете значения, если вы видите нуль, вы знаете, что это недостающее значение

Я думаю, что значения null clearer, 0 и '' запутывают, поскольку они явно не показывают намерение сохраненного значения

1
задан Pshemo 18 January 2019 в 17:19
поделиться

2 ответа

Я думаю, что вы пропустили вызов size++; из конструктора V3Radiator.

В этом случае правильные размеры:

v2.size - 5

v3.size - 15

V2Radiator

import java.util.List;

class V2Radiator {
    int size = 0;

    V2Radiator(List<SimUnit> list) {
        for(int x = 0; x < 5; x++) {
            list.add(new SimUnit("V2Radiator"));
            size++;
        }

    }
}

V3Radiator

import java.util.List;

class V3Radiator extends V2Radiator {
    V3Radiator(List<SimUnit> lglist) {
        super(lglist);
        for(int g = 0; g < 10; g++) {
            lglist.add(new SimUnit("V3Radiator"));
            size++;
        }
    }
}

Некоторое объяснение внесенных мною изменений:

Вы должны использовать интерфейс List <> вместо ArrayList <> в своем конструкторе, чтобы вызывающая сторона могла принять решение о реализации этого интерфейса.

Вы должны добавить параметр type в этот список, чтобы вызывающая сторона не могла передать, например, List в ваш конструктор

0
ответ дан aBnormaLz 18 January 2019 в 17:19
поделиться
1119 Почему должно быть 10? В V2Radiator v2 = new V2Radiator(aList); объект v2 имеет экземпляр элемента size, который увеличивается до 5, когда он создается внутри цикла for.

Когда вы создаете экземпляр V3Radiator v3 = new V3Radiator(aList);, вы создаете новый экземпляр v3, который является полностью новым экземпляром V3Radiator и отличается от более раннего экземпляра v2.

Таким образом, на экземпляр v2 не влияет создание экземпляра v3, и v3 имеет свою собственную копию переменной экземпляра size, унаследованную от V2Radiator. Экземпляр v3 при инициализации увеличивает свою собственную копию переменной size до 5, вызывая конструктор суперкласса.

Таким образом, вам нужно сделать переменную размера статической, в этом случае одно и то же значение будет общим для v2 и v3. При создании экземпляра v3 вы также увеличиваете size до 10.

class V2Radiator {
 static int size=0;

 V2Radiator(ArrayList list) {
     for (int x = 0; x<5; x++) {
        list.add(new SimUnit("V2Radiator"));
        size++;
     }    
  }
}

class V3Radiator extends V2Radiator {
 V3Radiator(ArrayList lglist) {
    super(lglist); //here size variable will be incremented for all instances.
    for(int g=0; g<10; g++) {
        lglist.add(new SimUnit("V3Radiator"));
    }
  }   
}
0
ответ дан Amardeep Bhowmick 18 January 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: