Tú escribe lo que sepas/puedas.
Cuando lo tengas, compártelo por aquí. Así lo revisamos y te ayudamos con lo que falte.
Por si sirve de ayuda, muestro como haría yo un par de clases (que no tiene por qué ser la mejor ni la única forma de hacerlo)
La clase Producto la haría abstracta, ya que está destinada a que las otras clases hereden de ellas.
No vamos a crear simplemente "productos". Crearemos "productos refrigerados", "productos congelados", etc...
Así que Producto interesa que sea abstracta. Tendrá los tres atributos básicos que comparten todos los tipos de productos, con sus getters y setters.
Ademas tiene un método abstracto, llamado getMargenGanancia().
Al hacerlo abstracto obligamos a que las clases que vayan a heredar de Producto, tengan que sobrescribir este método, pues cada tipo de producto tiene un margen de ganancia distinto. Así, todos tendrán este método, pero cada uno tendrá un código distinto adaptado a su propio margen de ganancia.
public abstract class Producto {
private String fechaVencimiento;
private String numLote;
private float costoTratamiento;
public Producto(String fechaV, String numL, float costo) {
fechaVencimiento = fechaV;
numLote = numL;
costoTratamiento = costo;
}
public abstract float getMargenGanancia();
public String getFechaVencimiento() {
return fechaVencimiento;
}
public void setFechaVencimiento(String fechaV) {
fechaVencimiento = fechaV;
}
public String getNumLote() {
return numLote;
}
public void setNumLote(String numL) {
numLote = numL;
}
public float getCostoTratamiento() {
return costoTratamiento;
}
public void setCostoTratamiento(float costo) {
costoTratamiento = costo;
}
}
En el siguiente ejemplo, pongo la clase Refrigerado
Hereda de Producto, así que automáticamente ya tendrá los atributos y métodos de la clase madre y tendrá que sobrescribir el método getMargenGanancia() para hacer su propio cálculo de este dato. Para los Refrigerados, el margen de ganancia es el 15% respecto al costo de tratamiento (atributo que hereda de Producto)
Además, se añaden los atributos propios de esta clase, junto con sus correspondientes getters y setters.
Tiene dos constructores. Uno que recibe los datos mínimos para crear un Producto, quedando el resto de atributos (los propios de Refrigerado) con valores indefinidos.
El otro constructor, recibe todos los datos necesarios para crear un Producto Refrigerado al completo, con todos los atributos con valores definidos.
public class Refrigerado extends Producto{
private String codigoSupervision;
private String fechaEnvasado;
private int tempMantemimiento;
private String granjaOrigen;
//Constructor con atributos mínimos para crear un Producto
public Refrigerado(String fechaV, String numL, float costo) {
super(fechaV, numL, costo);
codigoSupervision = "";
fechaEnvasado = "";
tempMantemimiento = 0;
granjaOrigen = "";
}
//Constructor con todos los atributos para crear un Producto Refrigerado
public Refrigerado(String fechaV, String numL, float costo, String codigoS,
String fechaE, int tempM, String granjaO) {
super(fechaV, numL, costo);
codigoSupervision = codigoS;
fechaEnvasado = fechaE;
tempMantemimiento = tempM;
granjaOrigen = granjaO;
}
@Override
public float getMargenGanancia() {
//Margen de ganancia del 15% respecto del costo
return 15f * getCostoTratamiento() / 100;
}
public String getCodigoSupervision() {
return codigoSupervision;
}
public void setCodigoSupervision(String codigoS) {
codigoSupervision = codigoS;
}
public String getFechaEnvasado() {
return fechaEnvasado;
}
public void setFechaEnvasado(String fechaE) {
fechaEnvasado = fechaE;
}
public int getTempMantemimiento() {
return tempMantemimiento;
}
public void setTempMantemimiento(int tempM) {
tempMantemimiento = tempM;
}
public String getGranjaOrigen() {
return granjaOrigen;
}
public void setGranjaOrigen(String granjaO) {
granjaOrigen = granjaO;
}
}
El resto de clases "producto" seguirían esta dinámica de herencia.