2014-10-01 118 views
1

在下面的代碼:對象類型轉換

A tat = new P(); 

P bat = (P) tat; 

的類型轉換tatP bat = (P) tat;

相同的話說:P tat = new P();

你能也說,在理論:P bat = (P tat = new P();)

+0

除了'tat'將特別是'P'而不是大概更通用的'A'以外,它是一樣的。 – 2014-10-01 01:41:49

+0

在這兩種情況下,'bat'都是'P'。你不需要沮喪地把'tat'分配給'bat'。 – 2014-10-01 01:56:03

回答

1

的答案是肯定的,但P bat = (P tat = new P();)是無效的Java代碼,並不會合作mpile。

你將不得不使用兩個語句來定義它們:

P bat, tat; 
bat = tat = new P(); 
+0

或者實際上它在同一行:'P bat,tat = bat = new P();' – 2014-10-01 01:44:04

0

在你的榜樣,你需要記住的是,雖然tat真是P一個實例,它由A定義的接口(假設P擴展或實現A,否則這將無法正常工作)。

接下來,bat將引用tat所指的同一對象,但它可通過P定義的接口進行訪問。

+0

是的,對不起P在我的例子中擴展A. – 2014-10-01 01:53:48