Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用;这";方法内部(不用于调用方法、构造函数或变量)_Java_Vector_This - Fatal编程技术网

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
类中。是的,您理解正确