Java 使用;这";方法内部(不用于调用方法、构造函数或变量)
我试图在不使用Java 使用;这";方法内部(不用于调用方法、构造函数或变量),java,vector,this,Java,Vector,This,我试图在不使用vector类中的构造函数参数的情况下更改向量的容量。所以我创建了一个MyVector类,并从Vector扩展了它。这段代码中的一切都正常工作,但我无法理解在setCapacityIncrement(int capacityIncrement)方法中使用“this” public class App { public static void main(String [] args) { MyVector<Integer> v = new
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());
}
}
公共类应用程序{
公共静态void main(字符串[]args)
{
MyVector v=新的MyVector(4);
System.out.printf(“容量=%d%n”,v.Capacity());
对于(int i=0;i<5;++i)
v、 加(i);
System.out.printf(“容量=%d%n”,v.Capacity());
v、 设置电容增量(10);
对于(int i=0;i<5;++i)
v、 加(i);
System.out.printf(“容量=%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;
}
}
类MyVector扩展了Vector{
公共MyVector()
{
超级();
}
公共MyVector(整数容量)
{
超级(容量);
}
public MyVector(Collection您需要this.capacityIncrement
,因为字段被参数capacityIncrement遮挡,因为它们具有相同的名称
如果执行了capacityIncrement=capacityIncrement;
操作,您将为capacityIncrement参数指定相同的值,而该值将无效
如果它们没有相同的名称,则不需要此,如下所示:
public void setCapacityIncrement(int increment)
{
capacityIncrement = increment;
}
根据您的编辑,在MyVector
类中使用capacityIncrement
字段也不是一个好主意,因为父Vector
中已经存在同名的受保护变量
这将导致向量capacityIncrement
字段被您自己的阴影遮挡。您需要此.capacityIncrement
,因为字段被参数capacityIncrement遮挡,因为它们具有相同的名称
如果执行了capacityIncrement=capacityIncrement;
操作,您将为capacityIncrement参数指定相同的值,而该值将无效
如果它们没有相同的名称,则不需要此,如下所示:
public void setCapacityIncrement(int increment)
{
capacityIncrement = increment;
}
根据您的编辑,在MyVector
类中使用capacityIncrement
字段也不是一个好主意,因为父Vector
中已经存在同名的受保护变量
这将导致矢量电容增量
字段被您自己的阴影遮住。当您使用“this”时,您指的是类的对象。
因此,this.capacityIncrement指的是向量类tat的对象中的变量capacityIncrement,它是从中调用的。请注意,传递到方法中的参数也称为capacityIncrement。因此,如果您刚刚编写,
capacityIncrement=不带“this”的capacityIncrement。编译器只会假设您引用的是局部变量,即参数
可变电容增量是vector类中的受保护变量。这意味着只有vector类或扩展vector类的类可以直接访问它。使用“this”时,您指的是类的对象。
因此,this.capacityIncrement指的是向量类tat的对象中的变量capacityIncrement,它是从中调用的。请注意,传递到方法中的参数也称为capacityIncrement。因此,如果您刚刚编写,
capacityIncrement=不带“this”的capacityIncrement。编译器只会假设您引用的是局部变量,即参数
变量capacityIncrement是vector类中的受保护变量。这意味着只有vector类或扩展vector类的类才能直接访问它。?类MyVector扩展向量{int capacityIncrement;公共MyVector(){super();}您不想这样做,因为capacityIncrement
已经是您正在扩展的Vector
上的受保护字段。如果您将其作为字段添加到自己的类中,那么您将在Vector
类中隐藏该字段。是的,您正确理解了这一点,但当我添加“int capacityIncrement;”在MyVector类中,它给出了不同的结果。当您添加“int capacityIncrement;”时,您的意思是什么?类MyVector扩展了向量{int capacityIncrement;public MyVector(){super();}您不想这样做,因为capacityIncrement
已经是您正在扩展的Vector
上的受保护字段。如果您将其作为字段添加到自己的类中,则将该字段隐藏在Vector
类中。是的,您理解正确