java在方法内部使用“this”(不用于调用方法、构造函数或变量)
我试图在不使用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;
}
}
# 1 楼答案
您需要
this.capacityIncrement
,因为字段被参数capacityIncrement遮挡,因为它们具有相同的名称如果您这样做了
capacityIncrement = capacityIncrement;
,您将为您的capacityIncrement参数指定相同的值,这将不会产生任何效果如果它们没有相同的名称,则不需要
this
,如下所示:根据您的编辑,在
MyVector
类中使用capacityIncrement
字段也是一个坏主意,因为父Vector
中已经有一个同名的受保护变量这将导致
Vector capacityIncrement
字段被您自己的字段遮挡# 2 楼答案
当您使用“this”时,您指的是类的对象。 所以这个。capacityIncrement是指从中调用的向量类tat的对象中的可变capacityIncrement。请注意,传递到方法中的参数也称为capacityIncrement。所以如果你只是写信, 电容增量=不带“this”的电容增量编译器只会假设您引用的是局部变量,即参数
可变电容增量是vector类中的受保护变量。这意味着只有vector类或扩展vector类的类可以直接访问它