使用对象作为构造函数的变量

时间:2011-11-26 23:48:50

标签: java object constructor

我有一个关于在构造函数中使用对象作为变量的问题。它可能很简单,但我真的想不出该怎么做,我的java书并没有真正帮助。说我想这样做

Fraction f3 = new Fraction(1, 2);
Fraction f5 = new Fraction(f3);

第一个对象的构造函数是:

public Fraction(int n, int d)

{
    if (d == 0)
    {
        numerator = 0;
        denominator = 1;
        System.err.println("Error: Invalid Denominator (" + d + ")");
    }
    else if (d < 0)
    {
        int nn = Math.abs(n) * (-1);
        numerator = nn;
        denominator = Math.abs(d);
    }
    else
    {
    numerator = n;
    denominator = d;
    }

}

第二个对象的构造函数是:

public Fraction(Fraction f) 

{

}

我想不出如何定义构造函数以使其将新对象设置为给定的对象。如果有人能给我一个手或者一些建议让我走上解决它的道路,我将非常感激。

4 个答案:

答案 0 :(得分:6)

public Fraction(Fraction f){
  this(f.numerator, f.denominator);
}

答案 1 :(得分:4)

我会使用“构造函数链接”来确保对其中的更改反映在另一个中。

// copy constructor
public Fraction(Fraction f) {
    this(f.numerator, f.denominator); // call the regular constructor with f's params
}

答案 2 :(得分:2)

public Fraction(Fraction f){
  this.n = f.n;
  this.d = f.d;
}

答案 3 :(得分:1)

你想要的东西

Fraction a = .... ;
Fraction b = new Fraction(a);
System.out.println(a==b);

打印true?这在Java中是不可能的; new始终生成一个与所有先前存在的对象分开的新对象。

(这与ECMAScript相反,其中允许构造函数返回现有对象并丢弃运行时创建并作为构造函数this传递的)新对象。