La clase
Medida sería muy sencilla.
Atributo double (o int) para el valor y un char para identificar si es G->galones, P->pintas o L->litros
Sus getters y setters.
Y se podría sobreescribir su método toString() para construir una cadena que muestre el valor en pantalla indicando la medida adecuada según el char.
La clase
Conversor, yo la haría con método estáticos.
Un método para convertir de pintas a galones, otro de pintas a litros, otro de galones a pintas, etc....
Cada uno de estos métodos recibiría como argumento un objeto
Medida, que es quien tendrá el valor que se ha de convertir.
Aquí podemos elegir entre hacer un método void que no retorne nada, si no que modifique el valor y el tipo del objeto
Medida que ha recibido para hacer la conversión.
La otra manera es hacer un método que retorne una nueva
Medida con el valor convertido y así no se modifica la medida original.
Ambas maneras son válidas, aunque yo prefiero la segunda.
Y con esto, ya sería hacer un menú con opciones para elegir el tipo de conversión o salir del programa.
Según el tipo de conversión escogida, se pide valor para la medida original, se construye una
Medida y se invoca al método estático correspondiente de la clase
Conversor. Tras el proceso de conversión, se muestra el nuevo valor en pantalla y retornamos al menú.
A continuación pongo un código de ejemplo, aunque te invito a que primero lo intentes tú a tu manera. Ya si luego te atascas o lo que sea, consultas este ejemplo y/o nos preguntas lo que necesites.
Clase
Medida
Clase
Conversor.
Solo pongo dos métodos de ejemplo, el resto se pueden escribir siguiendo el mismo patrón.
Insisto en que son método
estáticos, es decir, se podrán invocar sin tener que instanciar un objeto
Conversor
Y aquí una clase
Menu.
Solo tiene opciones para los dos métodos que puse de ejemplo.
Aunque no sea obligatorio, le he puesto un try catch para controlar posibles excepciones al introducir valores.
Así evitamos que el programa se interrumpa si se introducen letras. O si hay algún problema al meter valores decimales, ya que dependiendo del sistema de cada uno, se usará puntos o comas decimales.
En mi caso por ejemplo, lo valores se imprimen en pantalla con
coma decimal, pero tengo que introducirlos con
punto decimal.
Un ejemplo de ejecución en pantalla: