2015-12-28 165 views
1

假設我們有以下定義。Java實例混淆

interface Vessel{} 
interface Toy{} 
class Boat implements Vessel{} 
class Speedboat extends Boat implements Toy{} 

在主,我們有這些:

Boat b = new Speedboat(); 

(b instanceof Toy)評估是true?爲什麼?我的理解是,b的參考類型是Boat,但BoatToy無關,所以應該是false,但答案是true

+0

你應該閱讀[什麼是變量,對象和基準之間的差異?](http://stackoverflow.com/questions/32010172/what-is-the-difference-between-a -variable-對象和參考)。 –

回答

7

BoatToy沒有任何關係,您是對的。

你是不是處理一個Boat在這裏,但實際SpeedBoat存儲在一個Boat變量。而SpeedBoatToy的一個實例。

在其中存儲new Speedboat()並不重要,因爲檢查的Java運行時羯羊或不實際對象是別的東西的實例的類型。

你可以寫類似

public boolean callSpeedBoatMethodIfPossible(Boat b) { 
    if (b instanceof SpeedBoat) { 
     ((SpeedBoat)b).driveVerySpeedy(); 
    } 
}