是否有必要始终在构造函数中调用它?

时间:2014-08-18 15:50:04

标签: java this

我们说我创建了这个课程:

public class Panel extends JPanel{
    private JTextBox textBox;
    public Panel(){
        this.textBox = new JTextBox(10);
        add(this.textBox);
    }
}

在我的主要内容中:

public class Main{
    public static void main(String[] args){
        Panel panel1 = new Panel();
        Panel panel2 = new Panel();
    }
}

在课程Panel中,是否有必要在每一行都拨打this,还是可以将其遗弃?或者它会弄乱Panel s?

1 个答案:

答案 0 :(得分:5)

只有在收到与类中声明的字段名称相同的参数时才需要:

public class Foo {
    int x;
    int y;
    public Foo(int x) {
        this.x = x; //here is necessary
        y = -10; //here is not
    }
}

另一个奇怪的情况是子类隐藏超类中的字段。这是一个例子:

class Bar extends Foo {
    int y; //shadows y field in Foo
    public Bar(int x) {
        super(x); //calling constructor of super class
        super.y = -5; //updating y field from super class
        this.y = 10; //updating y field from current class
    }
}

有关后者的更多信息:Java Tutorial. Hiding Fields。请注意,这很奇怪,因为您应该避免这种情况。这在技术上是可行的,但使代码更难以阅读和维护。关于此的更多信息:What is variable shadowing used for in a Java class?