2017-03-03 78 views
1

下面的代碼:在構造函數中傳遞接口對象 - 我複製接口對象嗎?

public interface VehicleAbilities { 
    public void activateHyperDrive(); 
} 

public class Car implements VehicleAbilities { 

    public void activateHyperDrive() { 
     fastenSeatBelt(); 
     pressTheRedButton(); 
    } 
} 

public class Garage { 
    VehicleAbilities iVehicle; 
    public Garage(VehicleAbilities aVehicle) { 
     iVehicle = aVehicle; 
    } 

    public void fireUpCars() { 
     iVehicle.activateHyperDrive(); 
    } 
} 

public static void main (String[] args) { 
    Car car = new Car(); 
    Garage garage = new Garage(car); 
    garage.fireUpCars(); 
} 

我的問題是:是不是activateHyperDrive在​​對象同一輛車例如在main呼籲爲汽車,或者是當it's傳遞給​​它複製? AFAIK Java只是按值傳遞,那麼複製的對象是不是?有沒有可能出現的問題?謝謝。

+2

引用被複制而不是對象本身 –

+0

所以我沒有在內存中的兩個'汽車'對象? – dan

+1

Java總是[按值傳遞](http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value)。 –

回答

2

那是activateHyperDrive在車庫呼籲Car對象的同一輛車實例作爲主

是,同一個對象。

當它傳遞到車庫時是否被複制?

它不被複制,只是參考被傳遞。

AFAIK Java只是按值傳遞,那麼對象是不是被複制?

不是整個對象,只是將對象引用作爲值傳遞。

+0

因此,內存中沒有兩個對象? – dan

+0

@dan不,你不知道。原因是您只創建了一個對象 –

+0

使用關鍵字'new'時會創建該對象。你只用過一次,所以只有一個對象。 –