2014-04-20 66 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);