There is no difference between this.method()and super.method()until the specified method()is overridden in the caller class.
For example, when
class SuperClass {
public void method() {
System.out.println("SuperClass");
}
}
class SubClass extends SuperClass {
public SubClass() {
method();
this.method();
super.method();
}
}
Call
new SubClass();
Print
SuperClass
SuperClass
SuperClass
Till
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();
}
}
Call
new SubClass();
Print
SubClass
SubClass
SuperClass
At the same time, there is no difference between this.fieldand super.fielduntil the specified fieldone is hidden in the class of the caller.
For example, when
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);
}
}
Call
new SubClass("parameter");
Print
parameter
SuperClass
SuperClass
Till
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);
}
}
Call
new SubClass("parameter");
Print
parameter
SubClass
SuperClass
: methods() , fields .