我们说我创建了这个课程:
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?
答案 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?