Java 在这种情况下使用this.name或name有什么区别?
写this.name=name的目的是什么?如果在getName方法上返回name而不是this.name,有什么区别吗?我想我明白了。name=姓名,但请澄清 写这个的目的是什么。name=name 我想你是说在setName里。在setName中,this.name是实例变量字段,name是setName接受的参数。因此this.name=name使用参数的值设置实例字段的值 如果我在getName方法上返回name而不是this.name,有什么区别吗Java 在这种情况下使用this.name或name有什么区别?,java,Java,写this.name=name的目的是什么?如果在getName方法上返回name而不是this.name,有什么区别吗?我想我明白了。name=姓名,但请澄清 写这个的目的是什么。name=name 我想你是说在setName里。在setName中,this.name是实例变量字段,name是setName接受的参数。因此this.name=name使用参数的值设置实例字段的值 如果我在getName方法上返回name而不是this.name,有什么区别吗 不,因为getName中的作用域中没
不,因为getName中的作用域中没有任何name参数或局部变量,所以Java编译器知道您指的是name实例变量。即使不需要,也要始终包含它,或者在不需要时不使用它,这是一种样式选择。这是在有阴影时完成的,您有两次声明名称变量,一次在方法中作为参数或局部变量,另一次作为类成员,在方法中,变量成员由参数变量名称阴影,因此,要访问它,您必须指定this.name,它引用成员变量名 因此,在方法名称中,变量指的是参数,而this.name指的是成员变量名称。 所以阴影问题解决了
package holinheritation2;
import java.util.Scanner;
public class Inheritation2 {
public static void main (String args[]) {
Animal wolf = new Animal();
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
wolf.setName(name);
if (wolf.getName().equalsIgnoreCase("Kobe")) {
System.out.println("You are a wolf called Kobe!");
}
}
}
package holinheritation2;
import java.util.Scanner;
public class Animal {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
`enter code here`}
名称是指在方法中定义的局部变量名称。this.name引用类中设置的变量
这是为了使编译器能够区分具有相同名称的变量集。如果局部变量与实例变量具有相同的名称,然后局部变量将隐藏实例变量,您必须使用此关键字才能访问隐藏的实例变量。this.name=>实例变量,name=>接受为参数的局部变量。
private String name;
public void setName(String name) {
this.name = name;
}