为什么变量size
等于 5 而不是 10?super(lglist)
调用不会将大小值增加 5 吗?
class V2Radiator {
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);
for(int g=0; g<10; g++) {
lglist.add(new SimUnit("V3Radiator"));
}
}
}
public class TestLifeSupportSim {
public static void main(String[] args) {
ArrayList aList = new ArrayList();
V2Radiator v2 = new V2Radiator(aList);
V3Radiator v3 = new V3Radiator(aList);
System.out.println(v2.size);
}
}
为什么应该是 10?在V2Radiator v2 = new V2Radiator(aList);
对象v2
具有实例成员size
当它在 for 循环中实例化时,该成员将增加到 5。
当您实例化V3Radiator v3 = new V3Radiator(aList);
时,您将创建一个新的实例v3
该实例完全是V3Radiator
的新实例,并且与以前的实例v2
不同。
因此,v2
实例不受v3
实例化的影响,并且v3
拥有自己的从V2Radiator
继承的size
实例变量的副本。初始化时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"));
}
}
}
我想你错过了V3Radiator
构造函数的size++;
调用。
在这种情况下,正确的大小是:
v2.大小 - 5
v3.大小 - 15
V2散热器
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++;
}
}
}
V3散热器
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<>以便调用方可以决定该接口的实现
您应该将类型参数添加到该列表中,以便调用方无法将 List 传递给您的构造函数