Hola RaGa: de la misma manera que se ha hecho en otros hilos, indicarte que este tipo de métodos
public void mostrarPaisDeOrigen(){System.out.print(paisDeOrigen+"\n");}
deberías de empezar a dejar de usarlos. En cambio deberías usar:
public String getPaisDeOrigen(){return ""+paisDeOrigen+"\n");}
Es decir, que el método devuelva un String. En la clase con el main, ya te encargarías de gestionar que se muestre por pantalla.
Tu clase TestHerencia2 es mejorable.
¿Para qué necesitas estos atributos en esta clase:
static String tmpFechaDeCaducidad;
static int tmpNroLote;
?
Esos atributos deben ser gestionados por la clase que le corresponda, no por la clase con el método main.
Con la clase GestorTipoProducto creo que te has hecho un pequeño lío:
TestHerencia2.cargarFechaCaducidadTipoProducto(GestionadorEntradasTeclado.leerString());
Esto es lo que se puede llamar código ofuscado: un código complicado con numerosas entrellamadas y difícil de entender (algo que no se debe utilizar).
Puedes mirar este ejercicio como ejemplo de solución:
https://www.aprenderaprogramar.com/foros/index.php?topic=2306Y te recomendaría revisar el diseño teniendo en cuenta lo siguiente: cada clase tiene sus responsabilidades, entre ellas gestionar sus atributos. Y la clase con el main únicamente tiene que encargarse de digirir la operación e interacción entre objetos, nada más.
Saludos