this與super有什麼差別?
this
在Java中,this用來指目前執行個體對象,它主要就是區分對象的成員變量還是方法的形參,當成員變量和方法的形參相同名字的時候,就會用覆寫成員變量。
class Student{
String name ;
//正确的寫法
public Student(String name){
this.name = name ;
}
//錯誤的寫法
public Student(String name){
name = name;
}
}
在第一個構造函數中的this.name是成員的,而不是這個構造函數的形式參數,
第二個兩個name都是構造函數的形式參數。
要通過this才能通路到成員變量,在這個例子中很好的展現出this的作用。
super
super可以用來通路父類的方法和成員變量。當子類的方法或者成員變量與父類有相同的名字時也會時覆寫父類的方法和成員變量,想要通路父類的方法或成員變量隻能通過super關鍵字來通路。
示例如下。
class Base{
public void f(){
System.out.println("Base:f()");
}
}
class Sub extends Base{
public void f(){
System.out.println("Sub:f()");
}
public void subf(){
f();
}
public void basef(){
super.f();
}
}
public class Test {
public static void main (String[] args){
Sub s = new Sub();
s.subf();
s.subf();
}
}
運作結果:
Sub:f()
Base:f()