У меня есть этот интерфейс:
public interface Numeric {
public Numeric addition(Numeric x,Numeric y);
public Numeric subtraction(Numeric x,Numeric y);
}
И этот класс:
public class Complex implements Numeric {
private int real;
private int img;
public Complex(int real, int img) {
this.real = real;
this.img = img;
}
public Numeric addition(Numeric x, Numeric y) {
if (x instanceof Complex && y instanceof Complex) {
Complex n1 = (Complex)x;
Complex n2 = (Complex)y;
return new Complex(n1.getReal() + n1.getReal(), n2.getImg() +
n2.getImg());
}
throw new UnsupportedOperationException();
}
public Numeric subtraction(Numeric x, Numeric y) {
if (x instanceof Complex && y instanceof Complex) {
Complex n1 = (Complex)x;
Complex n2 = (Complex)y;
return new Complex(n1.getReal() - n1.getReal(), n2.getImg() -
n2.getImg());
}
throw new UnsupportedOperationException();
}
public int getReal() {
return real;
}
public int getImg() {
return img;
}
}
Почему я получаю эту ошибку:
несовместимые типы: числовые нельзя преобразовать в комплексные
когда я запускаю этот код:
public class TestNumeric {
public static void main(String[] args) {
Complex c1 = new Complex(3, 4);
Complex c2 = new Complex(1, 2);
Complex rez;
rez = rez.addition(c1, c2);
}
}
Ошибка в строке "rez = rez.addition(c1, c2);"
Комплекс реализует Numeric, поэтому каждый Numeric является комплексом, верно? Я уже сделал кастинг и проверку внутри метода сложения. Почему я получаю эту ошибку и как ее исправить?
Complex implements Numeric, so every Numeric is a Complex
- нет, каждыйComplex
естьNumeric
. Обратное неверно. - person Eran   schedule 09.12.2019Complex
естьNumeric
. - person stevecross   schedule 09.12.2019rez
не инициализирован. Если вы установитеrez
типаNumeric
(и фальшиво инициализируете переменную переменной, чтобы избежатьNPE
), ваш код скомпилируется. Это нормально:Numeric rez = c1.addition(c1, c2);
но, как говорят другие, вероятно, было бы лучше изменить свой метод и сделать так:Numeric rez = c1.addition(c2);
- person Ermal   schedule 09.12.2019addition
возвращаемым типомNumeric
, вы не можете назначить его переменной типаComplex
. - person Sotirios Delimanolis   schedule 09.12.2019interface Numeric<T> { T addition(T x, T y); T subtraction(T x, T y); }
, а затемclass Complex implements Numeric<Complex> { ... }
. - person kaya3   schedule 04.02.2020