我看到一些Java示例使用this关键字来获取超类方法.示例:this.superClassMethod().通常情况下我们会使用super.有人可以帮助澄清为什么开发人员使用this而不是super?谢谢.
sp0*_*00m 18
在调用者的类中被覆盖之前this.method()和之间没有区别.super.method()method()
例如,用
class SuperClass {
public void method() {
System.out.println("SuperClass");
}
}
class SubClass extends SuperClass {
public SubClass() {
method();
this.method();
super.method();
}
}
Run Code Online (Sandbox Code Playgroud)
调用
new SubClass();
Run Code Online (Sandbox Code Playgroud)
打印
SuperClass
SuperClass
SuperClass
Run Code Online (Sandbox Code Playgroud)
与...同时
class SuperClass {
public void method() {
System.out.println("SuperClass");
}
}
class SubClass extends SuperClass {
@Override
public void method() {
System.out.println("SubClass");
}
public SubClass() {
method();
this.method();
super.method();
}
}
Run Code Online (Sandbox Code Playgroud)
调用
new SubClass();
Run Code Online (Sandbox Code Playgroud)
打印
SubClass
SubClass
SuperClass
Run Code Online (Sandbox Code Playgroud)
与此同时,有没有什么区别this.field,并super.field直至上述field被隐藏在调用者的类.
例如,用
class SuperClass {
protected String field = "SuperClass";
}
class SubClass extends SuperClass {
public SubClass(String field) {
System.out.println(field);
System.out.println(this.field);
System.out.println(super.field);
}
}
Run Code Online (Sandbox Code Playgroud)
调用
new SubClass("parameter");
Run Code Online (Sandbox Code Playgroud)
打印
parameter
SuperClass
SuperClass
Run Code Online (Sandbox Code Playgroud)
与...同时
class SuperClass {
protected String field = "SuperClass";
}
class SubClass extends SuperClass {
private String field = "SubClass";
public SubClass(String field) {
System.out.println(field);
System.out.println(this.field);
System.out.println(super.field);
}
}
Run Code Online (Sandbox Code Playgroud)
调用
new SubClass("parameter");
Run Code Online (Sandbox Code Playgroud)
打印
parameter
SubClass
SuperClass
Run Code Online (Sandbox Code Playgroud)
附注:methods()得到重写而fields获得隐藏.
使用this不会调用超类方法.它实际上是多余的,因为它专门调用此实例的方法.如果要调用同一实例的另一个构造函数,则可能是相关的,但除此之外它与调用该方法相同.
它可能对变量作用域有用(例如,当存在一个与实例变量同名的局部变量时)以确保使用实例变量,但在调用方法时没有区别.
我个人认为开发人员想要利用代码完成,IDE在输入后显示可能的方法名称this.:-)