2 回答

TA貢獻1998條經驗 獲得超6個贊
this
是一個關鍵字,在默認情況下,this
指向的是這個關鍵字所處的方法所屬的類的實例,同時這個實例即是你調用this
時所處的實例;但是在內部類中你也可以顯式得修改this
的指向,比如:
public class Main {
public static class Foo {
public class Bar {
public void func() {
System.out.println(Foo.this.hashCode());
}
}
public void func() {
System.out.println(this.hashCode());
new Bar().func();
}
}
public static void main(String... args) {
new Foo().func();
}
}
運行后,會輸出兩個相同的數字,這意味著你在內部類Bar
中可以顯式得修改this
的指向從而對外部類Foo
進行操作。
super
同樣是個關鍵字, 它一般用來在繼承得到的子類中調用父類非私有的屬性、方法,子類是從父類繼承而來,這就意味著如果父類不是一個空類,那么父類一定有一些屬性、方法是子類所沒有的或子類已經覆寫了。
如果是子類所沒有的屬性和方法,這時this
顯然就獲取不到這些屬性和方法,因此需要使用super
來聲明"我要從父類中拿到這個屬性、調用這個方法"。
如果是子類已經覆寫了的方法,那么顯然存在一個方法的兩個版本,在不指定super
的情況下,Java
是默認你調用的是子類的方法,你寫不寫this
都無關緊要,如果你想調用父類的該方法,就需要super
關鍵字來指定你想調用的方法版本。
添加回答
舉報