2014-04-20 67 views
7

我在做一個項目Greenfoot,我做了一個虛擬的數字類。在我的項目中,我發現需要將兩個虛構對象一起添加(或減去或其他),是否有添加兩個對象的方法?所以這就是它在完美世界中的樣子:Java:添加兩個對象

Imaginary i1 = new Imaginary(1.7,3.14); 
    Imaginary i2 = new Imaginary(5.3,9.1); 
    //the class Imaginary has parameters (double real, double imaginary) 
    Imaginary i3 = i1+i2; 

這可能嗎?

+0

但是,在Java中沒有運算符重載這樣的事情。它必須寫成類似於'i3 = i1.add(i2)'(其中'add'是執行適當邏輯並創建新對象的方法)。 – user2864740

+0

這是一個非常有效的問題,我不明白downvotes。 –

回答

3

Java有沒有運算符重載

例如,如果您可以寫a + b而不是a.add(b)BigDecimal會更受歡迎。

方式1

Imaginary i3 = i1.add(i2); 

方法:

public static Imaginary add(Imaginary i2) 
{ 
    return new Imaginary(real + i2.real, imaginary + i2.imaginary); 
} 

路2

Imaginary i3 = add(i1, i2) 

方法:

public static Imaginary add(Imaginary i1, Imaginary i2) 
{ 
    return new Imaginary(i1.real + i2.real, i1.imaginary + i2.imaginary); 
} 

運算符重載會做出一定設計比沒有它更復雜,它可能會導致更復雜的編譯器或減慢JVM。

+0

嘿,非常感謝,兩種方法都可能有用。 – Pavel

+0

Java實際上_does_有運算符重載(例如String類的'+'運算符),所以很明顯編譯器設計/性能沒有進入它。如果內存提供服務,開發人員選擇禁止運算符重載_user_design_ _classes_,因爲他們認爲它降低了程序的可讀性和清晰度。 – ApproachingDarknessFish

5

請嘗試像這樣。

Imaginary i3 =new Imaginary(i1.real+i2.real,i1.imaginary+i2.imaginary); 

如果你想添加Object您可以創建另外的方法。

public static Imaginary add(Imaginary i1,Imaginary i2) 
{ 
return new Imaginary(i1.real+i2.real,i1.imaginary+i2.imaginary); 
} 

,並創建這個

Imaginary i3 =add(i1,i2); 
8

你所描述被稱爲「運算符重載」,它不能在Java中(至少程序員,如你我實現目標;開發商有免費統治這樣做,並用String類來完成)。相反,你可以創建一個add方法和調用:

Imaginary i3 = i1.add(i2); 
3

有可能在C++中,而不是在Java中,定義一個函數addImaginary(Imaginary, Imaginary)這將增加兩個Imaginarys並存儲在他們的對象將調用的方法。

它看起來像:

i3.addImaginary(i1, i2) 

但它取決於你如何定義的功能外,還可以做到:

i3=i1.add(i2);