Ваш интерфейс должен иметь Тип Generic , чтобы соответствовать требованиям метода интерфейса тип возвращаемого значения и тип аргумента , проверьте код ниже:
Сначала вы должны определить общий интерфейсный класс Number
как:
package com.oop.concepts;
public interface Number<T extends Number> {
T add(T t);
}
После того, как у вас есть Generic add с возвращаемым типом T и аргументом TypeВы можете реализовать его, как показано ниже:
package com.oop.concepts;
public class Fraction implements Number<Fraction> {
private float a;
public Fraction(float a) {
this.a = a;
}
@Override
public String toString() {
return "Fraction{" +
"a=" + a +
'}';
}
@Override
public Fraction add(Fraction n) {
return new Fraction(this.a + n.a);
}
}
То же самое для сложного класса:
package com.oop.concepts;
public class Complex implements Number<Complex> {
private Double x;
private Double y ;
public Complex (Double x, Double y) {
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "Complex{" +
"x=" + x +
", y=" + y +
'}';
}
@Override
public Complex add(Complex n) {
return new Complex(this.x + n.x, this.y + n.y);
}
}
Тестовый класс:
package com.oop.concepts;
public class TestNumber {
public static void main (String args[]) {
Complex c1 = new Complex(3.4, 56.78);
Complex c2 = new Complex(3.4, 56.78);
Complex c3 = c1.add(c2);
System.out.println(c3);
Fraction f1 = new Fraction(3.4f);
Fraction f2 = new Fraction(1.0f);
Fraction f3 = f1.add(f2);
System.out.println(f3);
}
}
Вывод вышеприведенных тестовых примеров:
Complex{x=6.8, y=113.56}
Fraction{a=1.0}
Fraction{a=4.4}
Надеюсь, что это дает четкое понимание концепции ООП наряду с Общими принципами в JAVA
Я вставил этот код в github, посмотрите