es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sobrescribir método void con cálculo de variable de acceso privado.

Estoy haciendo una tarea que me requiere crear un programa para almacenar información sobre herramientas. La clase inicial se usa para probar los resultados de otras clases. Las otras 4 están compuestas por una superclase llamada Equipment y deben ser abstractas, y luego 3 clases hijas.

He logrado ordenar la clase de equipos (creo), pero no puedo trabajar cómo reemplazar la propiedad replacementYear que es privada ya que la fórmula para obtener el resultado cambia para cada clase.

La fórmula para la clase con batería es:
Año de reemplazo = longitud de la garantía + año de compra

¿Necesito crear un objeto para completar la fórmula en cada clase y usar una instrucción de retorno con el año de reemplazo que estoy reemplazando?

Lo siento si no está muy claro, pero a continuación se muestra el código.

// Clase padre abstracta
abstract class Equipment {
private String make;
private String model;
private int purchaseYear;
private String replacementYear;

// Constructor de Equipment
public Equipment() 
{
    make = "";
    model = "";
    purchaseYear = 0;
}

abstract void replacementYear();

public String getMake()
{
    return make;
}

public void setMake(String newMake) {
    this.make = newMake;
}

public String getModel()
{
    return model;
}

public void setModel(String newModel) {
    this.model = newModel;
}

public int getPurchaseYear()
{
    return this.purchaseYear;
}

}

// Clase hija
class BatteryPoweredEquipment extends Equipment {
private int warranty = 0;

// Constructor
public void BatteryPoweredEquipment()
{    }

// get y set warranty
public int getWarranty()
{
    return warranty;
}

public void setWarranty(int newWarranty)
{
    this.warranty = newWarranty;
}

// reemplazo
@Override
void replacementYear() {
    System.out.println(warranty + this.getPurchaseYear());
  }

}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para anular la propiedad replacementYear en cada clase hija, se puede crear un método en cada clase que devuelva el año de reemplazo en función de la fórmula matemática específica para ese tipo de equipo.

    Por ejemplo, en la clase BatteryPoweredEquipment, se puede crear un método llamado getReplacementYear() que calcule el año de reemplazo en función de la garantía y el año de compra:

    class BatteryPoweredEquipment extends Equipment {
        private int warranty = 0;
    
        //Constructor
        public BatteryPoweredEquipment()
        {    }
    
        //set & get warranty
        public int getWarranty()
        {
            return warranty;
        }
    
        public void setWarranty(int newWarranty)
        {
            this.warranty = newWarranty;
        }
    
        //override
        @Override
        void replacementYear() {
            System.out.println(getReplacementYear());
        }
    
        //calculate replacement year for battery powered equipment
        public int getReplacementYear() {
            return this.warranty + this.getPurchaseYear();
        }
    }
    

    Luego, en la clase de prueba, se puede llamar al método replacementYear en una instancia de la clase hija (como BatteryPoweredEquipment) para imprimir el año de reemplazo calculado:

    class Test {
        public static void main(String[] args) {
            BatteryPoweredEquipment bpe = new BatteryPoweredEquipment();
            bpe.setPurchaseYear(2018);
            bpe.setWarranty(3);
            bpe.replacementYear(); //imprime 2021
        }
    }
    

    Este enfoque le permite anular la propiedad privada replacementYear en cada clase hija proporcionando una implementación diferente del método replacementYear.

Comments are closed.