[英](class)this.method and super.method in java
因此,我有兩種方法,一個在父類中,一個在子類中,具有相同的名稱和參數,可以說是public void method()。 我在子類中還有另一個方法method1(),如下所示:
public void method1()
{super.method();}
上面的代碼在執行時按計划進行(如果我將其更改為該方法,則method1使用超類的方法):
public void method1()
{((Class)this).method();}
由於某些原因,Class是超類的名稱,它不使用超類方法,而是使用具有相同名稱的子類的方法。 ((Class)this)是不是超級相同的東西? 為什么會這樣?
編輯:這是實際的類(我添加了實際的代碼,所以我的問題更加清楚)
public class MWindow extends Window
{
private String message = "No message";
protected int size = 7;
public MWindow(String message)
{
size = 2;
this.message = message;
System.out.println ("Window message = " + message);
}
public MWindow(int size, String message)
{
super(size);
this.message = message;
System.out.println ("Window message = " + message);
}
public void setSize1(int y)
{size = y;}
public void setSize2(int z)
{super.setSize (z);}
public void printSize()
{System.out.println ("MSize="+size);}
public void printSize1()
{System.out.println(((Window)this).size);}
public void printSize2()
{((Window)this).printSize();}
}
這是超類
public class Window
{
protected int size;
public Window()
{
size=1;
System.out.println("Window size="+size);
}
public Window(int size)
{
this.size=size;
System.out.println("Window size="+size);
}
public void setSize(int x)
{size += x;}
public void printSize()
{System.out.println("Size=" + size);}
}
這是main()類
public class RunWindow
{
public static void main (String[] args)
{
Window w1=new Window();
Window w2=new Window(2);
System.out.println(w1.size);
System.out.println(w2.size);
MWindow mw1=new MWindow("First MWindow");
MWindow mw2=new MWindow(3, "Second MWindow");
System.out.println(mw1.size);
System.out.println(mw2.size);
mw1.setSize1(4);
System.out.println(mw1.size);
mw1.setSize2(2);
System.out.println(mw1.size);
mw1.setSize(2);
System.out.println(mw1.size);
w1.printSize();
mw1.printSize();
mw1.printSize1();
mw1.printSize2();
}
}
執行以上操作,我們得到:
Window size=1
Window size=2
1
2
Window size=1
Window message = First MWindow
Window size=3
Window message = Second MWindow
2
7
4
4
4
Size=1
MSize=4
5
MSize=4
問題在於,最后的結果應該是Size = 5而不是MSize = 4,因為調用了超類printSize方法,而不是子類的printSize方法。
這就是多態性(及其后期綁定機制)的工作方式。 它不考慮引用類型,而是實例的實際類型。
這就是為什么你的((SuperClass)this).method();
與this.method()
行為相同。
與((SuperClass)this)超級不同嗎?
所以不, super
和((SuperClass)this)
這不一樣。
通過super.method()
您可以將控制流移動到可用於超類的method()
代碼中,但是通過(SuperClass)this
您僅是轉換引用。
不,總之, (Class)this
是將類的引用類型轉換為超類,但是被引用的類保持不變。 現在,通常,如果您有一個指向a的類型引用,並且您調用了一個覆蓋的方法,則預期的行為是獲取被覆蓋的方法。 因此, (Class)this
沒有什么不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.