null означает, что нет значения, а 0 - нет, если вы видите 0, вы не знаете значения, если вы видите нуль, вы знаете, что это недостающее значение
Я думаю, что значения null clearer, 0 и '' запутывают, поскольку они явно не показывают намерение сохраненного значения
Я думаю, что вы пропустили вызов 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 в ваш конструктор
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"));
}
}
}