我尝试在不使用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字段被您自己隐藏。

09-18 00:11