我嘗試使用this
和super
以下代碼段。在Java中使用this和super
class SuperClass
{
public final int x=10;
public final String s="super";
public String notOverridden()
{
return "Inside super";
}
public String overrriden()
{
return "Inside super";
}
}
final class SubClass extends SuperClass
{
private final int y=15;
private final String s="sub"; //Shadowed member.
@Override
public String overrriden()
{
return "Inside sub";
}
public void test()
{
System.out.println(super.notOverridden());
System.out.println(this.notOverridden());
System.out.println(this.overrriden());
System.out.println(super.overrriden());
System.out.println(this.s);
System.out.println(super.s);
System.out.println(this.x);
System.out.println(super.x);
System.out.println(this.y);
}
}
public final class Test
{
public static void main(String[] args)
{
SubClass subClass=new SubClass();
subClass.test();
}
}
在這種最簡單的Java代碼,該重定向類顯示輸出以下內的方法test()
內的輸出到控制檯的語句。
Inside super
Inside super
Inside sub
Inside super
sub
super
10
10
15
因此,看來有this
和super
之間沒有差別,當它們被用於未在它的子類(ES)重寫訪問方法和在變量情況下,當它們沒有在陰影其子類(es)。
他們都傾向於指向超類成員。然而,如果不是這種情況,則會有明顯的區別。
它們是否相同,當方法沒有被覆蓋或者變量沒有被映射到相應的子類中?
這聽起來像你已經回答了你的問題,但是有。 – supersam654 2013-04-21 01:17:34
是的,但我認爲這是危險的假設。你最終可能會覆蓋子類中的方法,然後超級,這不會給出相同的結果。 – Matt 2013-04-21 01:20:12
「在其子類中未被覆蓋的方法」一個類不應該知道其子類的任何內容。你不能確定該行的一些子類不會覆蓋該方法,除非它是「final」。 – newacct 2013-04-21 20:18:51