Estoy creando un sistema de salario para empleados. Tengo una clase abstracta Employee
. WageEmployee
y Manager
extienden Employee
. Luego, Programmer y SalesPerson
extienden WageEmployee
.Java, herencia múltiple. ¿Cómo debería hacer esto?
Mi problema es que quiero crear un SalesManager
. El SalesManger
tiene su pago calculado agregando comisión y un salario. Entonces tienen el tipo SalesPerson
y Manager
.
¿Qué debería hacer una interfaz y qué debería extenderse SalesPerson
?
Es natural ampliar SalesManager
desde el administrador, luego hacer SalesPerson
una interfaz. Pero no puedo porque hereda de WageEmployee
...
¿Cómo hago para que funcione? ¿correctamente?
abstract class Employee
{
String name;
Employee() {}
Employee (String nm) { name = nm; }
abstract double computePay();
void display() {}
void setHours(double hrs) {}
void setSales(double sales) {}
void setSalary(double salary) { System.out.println("NO!"); }
}
¿Hay alguna funcionalidad heredada, o solo son métodos? –
Personalmente, comenzaría con todas las interfaces, esto le dará la mayor flexibilidad posible. Luego, debe averiguar a partir de allí qué implementaciones abstractas producirán la menor cantidad de reelaboración. La única otra solución que tiene es usar una solución de estilo proxy. Es decir, la funcionalidad de una interfaz la implementa un objeto proxy al que el objeto principal mantiene una referencia y llama en su nombre. – MadProgrammer
Las interfaces y la composición del objeto son tus amigos en este caso. –