我尝试在不使用Vector
类中的构造函数参数的情况下更改向量的容量。因此,我创建了一个MyVector
类,并从Vector
对其进行了扩展。一切都在这段代码中工作,但我无法理解在setCapacityIncrement(int capacityIncrement)
方法中使用“ this”。
public class App {
public static void main(String [] args)
{
MyVector<Integer> v = new MyVector<>(4);
System.out.printf("Capacity=%d%n", v.capacity());
for (int i = 0; i < 5; ++i)
v.add(i);
System.out.printf("Capacity=%d%n", v.capacity());
v.setCapacityIncrement(10);
for (int i = 0; i < 5; ++i)
v.add(i);
System.out.printf("Capacity=%d%n", v.capacity());
}
}
MyVector类:
class MyVector<T> extends Vector<T> {
public MyVector()
{
super();
}
public MyVector(int capacity)
{
super(capacity);
}
public MyVector(Collection<? extends T> coll)
{
super(coll);
}
public MyVector(int capacity, int capacityIncrement)
{
super(capacity, capacityIncrement);
}
public void setCapacityIncrement(int capacityIncrement)
{
this.capacityIncrement = capacityIncrement;
}
}
最佳答案
您需要this.capacityIncrement
,因为字段具有相同的名称,因此该字段被参数CapacityIncrement遮盖。
如果您执行capacityIncrement = capacityIncrement;
,则将为您的CapacityIncrement参数分配相同的值,这将无效。
如果它们的名称不同,则不需要this
,如下所示:
public void setCapacityIncrement(int increment)
{
capacityIncrement = increment;
}
根据您的编辑,在
capacityIncrement
类中具有MyVector
字段也是一个坏主意,因为在父Vector
中已经存在一个具有相同名称的受保护变量。这将导致
Vector capacityIncrement
字段被您自己隐藏。