Использование объекта в качестве переменной для конструктора - PullRequest
3 голосов
/ 27 ноября 2011

У меня есть вопрос об использовании объекта в качестве переменной в конструкторе. Это может быть просто, но я просто не могу думать о том, что делать, и моя книга по 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 ]

6 голосов
/ 27 ноября 2011
public Fraction(Fraction f){
  this(f.numerator, f.denominator);
}
4 голосов
/ 27 ноября 2011

Я бы использовал «построение цепочек», чтобы изменения, внесенные в одну из них, отражались в другой.

// copy constructor
public Fraction(Fraction f) {
    this(f.numerator, f.denominator); // call the regular constructor with f's params
}
2 голосов
/ 27 ноября 2011
public Fraction(Fraction f){
  this.n = f.n;
  this.d = f.d;
}
1 голос
/ 27 ноября 2011

Вы хотите что-то такое, что

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

отпечатки true? Это невозможно в Java; new всегда создает свежий объект, который отделен от всех ранее существующих объектов.

(Это, в отличие от, скажем, ECMAScript, где конструктору разрешено возвращать существующий объект и отбрасывать свежий объект во время выполнения, созданный и переданный как конструктор this).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...