Объяснение
У вас нет конструктора, который принимает другой MyComplex
( конструктор копирования ). Вы только создали конструкторы, которые принимают:
- Без аргументов,
new MyComplex()
- Два
int
аргумента, new MyComplex(5, 2)
Решение
Вам нужно явно определить конструкторы, которые вы хотите использовать. Java не генерирует такой конструктор для вас. Например:
public MyComplex(MyComplex other) {
realPart = other.realPart;
imaginaryPart = other.imaginaryPart;
}
Тогда это также будет работать.
Примечания
Чтобы повысить читабельность вашего кода, вы должны использовать явную пересылку конструктора дляновый конструктор копирования и специально для вашего конструктора по умолчанию .
Например, прямо сейчас ваш конструктор по умолчанию new MyComplex()
приведет к комплексному значению 0 + 0i
. Но это легко можно заметить, так как ваш код явно не указывает на это.
С пересылкой намерение намного яснее:
public MyComplex() {
this(0, 0);
}
public MyComplex(MyComplex other) {
this(other.realPart, other.imaginaryPart);
}
Тогда оба будут просто пересылать явный конструктор, который принимаетдва значения int
.
Обратите внимание, что единственный конструктор Java, автоматически генерируемый для вас, - это тривиальный конструктор по умолчанию. То есть public MyComplex() { }
(без аргументов - ничего не делает). И только если вы сами не написали конструктор.