Ваш Fraction
метод - это метод, который определен для возврата типа int, но вы вызываете его так, как если бы он был конструктором.
Конструкторы ничего не возвращают, поэтому не объявляют тип возвращаемого значения. (у них даже нет типа void
, поэтому компилятор знает, что они являются конструкторами, а не методами, и их нужно вызывать с помощью new
. Это небольшая ошибка, поскольку Java позволяет объявлять методы с тем же именем, что и класс , IIRC одна из головоломок в Java Puzzlers делает это).
Удалите тип возврата "int
" из определения:
public class Fraction{
private int numerator;
private int denominator;
public Fraction(int num, int denom) {
//...
Как это будет устанавливать оба числа из дроби c в классе драйверов, которые поступают из утилиты сканера, а также, если бы значения c были заменены значениями, поступающими из дроби d?
Вы делаете два звонка на new Fraction(..,..)
. Каждый раз, когда вы используете new
, он создает новый объект запрошенного класса и затем вызывает конструктор для этого объекта со значениями, которые вы ему задаете. Таким образом, c
и d
будут содержать ссылки на различные экземпляры Fraction
. Поскольку поля numerator
и denominator
Fraction
не помечены как static
, то каждый экземпляр Fraction
будет иметь свою собственную копию этих полей, поэтому значения передаются в конструктор объекта, ссылка на который будут храниться в переменной c
, сохраняются в первом новом объекте, а переменные d
- во втором новом объекте. Поскольку это разные объекты, значения не заменят друг друга.