Solucionado (ver solución)
Solucionado
(ver solución)
4
respuestas

[Bug] Creo que la explicación está errada...

Hola comunidad, a mi parecer creo que la explicación que Diego indica a partir del minuto 5:18 de esta aula o sección 09, no concuerda con los resultados obtenidos por mí. Porque resulta que a manera de comprobar lo indicado, eliminé la sobreescritura del método getBonificar() de la clase Contador, pero ése método si seguía estando en las clases Funcionario y Gerente, entonces quise realizar la consulta para saber cual era la bonificación que le correspondía a un objeto de la clase Contador, y en ese caso el método getBonificar() que se ejecuto fue precisamente el de la clase Funcionario y no el método de la clase Gerente. Se observa claramente que el resultado que muestra en consola es exactamente el 10% (500) del salario de 'yosigiro' que es de 5000 y ese es el porcentaje definido en el método para un objeto de Funcionario o heredado de él. Ahora si habilito ése método en Contador, si se ejecuta el método definido en Contador, tal como se puede observar. Si alguien cree que estoy equivocado con esa apreciación, por favor que realice la respectiva explicación. Anexo los códigos:

public class Contador extends Funcionario{
    /*@Override
    public double getBonificar() {
        System.out.println("Ejecutando método desde Contador");
        return 800;
    }*/
}
public static void main(String[] args) {
        Funcionario armando=new Funcionario();
        armando.setNombre("Armando Trampas");
        Funcionario juanito=new Funcionario();
        juanito.setNombre("Juanito Alimaña");

        Gerente pancha=new Gerente();
        pancha.setNombre("Espernancación Segura");
        Gerente chelo=new Gerente();
        chelo.setNombre("Aquiles Pinto");

        armando.setSalario(2000);
        pancha.setSalario(10000);
        juanito.setSalario(3000);
        chelo.setSalario(10000);

        Contador yosigiro=new Contador();
        yosigiro.setNombre("Yosigiro Chequesito");
        yosigiro.setSalario(5000);

        ControlBonificaciones controlBonificaciones =new ControlBonificaciones();

        System.out.println("La bonificacion de "+armando.getNombre()+" es: "+armando.getBonificar());
        controlBonificaciones.registrarBonificaciones(armando);
        System.out.println("La bonificacion de "+pancha.getNombre()+" es: "+pancha.getBonificar());
        controlBonificaciones.registrarBonificaciones(pancha);
        System.out.println("La bonificacion de "+juanito.getNombre()+" es: "+juanito.getBonificar());
        controlBonificaciones.registrarBonificaciones(juanito);
        System.out.println("La bonificacion de "+chelo.getNombre()+" es: "+chelo.getBonificar());
        controlBonificaciones.registrarBonificaciones(chelo);
        System.out.println("La bonificacion de "+yosigiro.getNombre()+" es: "+yosigiro.getBonificar());
        controlBonificaciones.registrarBonificaciones(yosigiro);

    }
}
Ejecutando el método desde Funcionario.
La bonificacion de Aquiles Pinto es: 11000.0
Ejecutando método desde Gerente
Ejecutando el método desde Funcionario.
El total de bonificaciones hasta el momento es: 22500.0
Ejecutando el método desde Funcionario.
La bonificacion de Yosigiro Chequesito es: 500.0
Ejecutando el método desde Funcionario.
El total de bonificaciones hasta el momento es: 23000.0

Ahora habilitando el método getBonificar() en Contador:

public class Contador extends Funcionario{
    @Override
    public double getBonificar() {
        System.out.println("Ejecutando método desde Contador");
        return 800;
    }
}
El total de bonificaciones hasta el momento es: 22500.0

Ejecutando método desde Contador
La bonificacion de Yosigiro Chequesito es: 800.0

Ejecutando método desde Contador
El total de bonificaciones hasta el momento es: 23300.0
4 respuestas

Hola Orlando que tal?

Es exactamente eso que comentas lo que el profesor Diego explica, "¿Qué pasa en ese caso, cuando tenemos el método, tanto en la clase padre como en la clase hija? ¿Qué sucede ahí? Sucede algo muy interesante y es esto de aquí. Él llama al método más específico." En este ejemplo La clase Funcionario es la clase "padre" y la clase Contador es la clase hija que hereda ese método de Bonificación en la clase Funcionario, sin embargo la clase Contador tiene su própio método Bonificación y como lo explica el profesor se llama al método más directo en este caso el método bonificación de la propia clase contador que tiene una lógica de cáluclo diferente, por eso cuando comentas esas líneas de código y crear una nueva instancia del tipo contador y vas a calcular la bonificación el busca en su própia clase si existe ese método, como no existe usa el heredado por la clase padre y vas a obtener un resultado basado en la lógica del método bonificación del funcionario y no el del contador.

Espero haberme conseguido explicar correctamente, estoy aqui en caso de que aún tengas alguna duda y muchas gracias por traer tu punto de vista, eso enriquece nuestros conocimientos.

¿Sabias que también puedes interactuar con el resto de nuestros compañero por Discord?

En Discord el alcance es mayor, la interacción es inmediata y llega a más compañeros de esta forma el foro solo quedaría para esclarecer cualquier duda que puedas tener sobre el contenido de los cursos

Si tienes algún comentario, opinión, recomendación o algún consejo sea por el Discord, con certeza por ahí llegará a más personas

¡Un saludo!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!
solución!

Hola Génesis es un gusto que haya atendido a mi inquietud, permitame y te explico lo siguiente, tal como tu lo mencionas: En ese ejemplo La clase Funcionario es la clase "padre" y la clase Contador al igual que la clase Gerente son clases hijas que heredan ese método de Bonificación definido en la clase Funcionario, sin embargo la clase Contador y la clase Gerente tienen su propio método Bonificación y como lo explica el instructor el compilador llama al método más directo en este caso el método bonificación de la propia clase Contador que tiene una lógica de cálculo diferente, por eso cuando yo dejo en modo comentario esas líneas de código, simulo con ello que la clase Contador no cuenta con su propio método Bonificación y al crear una nueva instancia del tipo Contador y se trata de calcular la bonificación, el compilador busca en su propia clase por si existe ese método, como supuestamente no existe, según Diego él buscaría en la otra clase más específica que es la clase Gerente pero eso no sucede, síii así lo dice después del minuto 5:18, si quiere revise muy bien; y que en el caso que el compilador tampoco lo encuentre en esa clase Gerente, si usaría el heredado por la clase padre y con ello si se obtendría un resultado basado en la lógica del método bonificación del Funcionario y no del Contador, ni de Gerente. Entonces el error o la equivocación de Diego es esa, lo que aparece resaltado con negrilla. Génesis me da pena refutarte esto, pero es una apreciación de Diego que no la pase como cierta, pero que tampoco perjudica en nada, ni la veo como una falta de conocimiento, porque el estilo de Diego me resulta muy agradable tanto por su tono de voz, la claridad en la vocalización, la pedagogía que utiliza y porque se le nota mucho conocimiento y dominio de los temas que expone. Nuevamente muy agradecido por toda la atención que me brindaste a este tema y hasta otra oportunidad. Felicidades...

yo vi el video y el en ese punto dice que si no tiene ese metodo simplemente escala un nivel por ensima de el en este caso sube al metodo de la clase Funcionario y no de Gerente como tu dices .el profe si dijo bien esa esplicacion.

Pido disculpas, porque revisando nuevamente el video con más detenimiento, me di cuenta que había malinterpretado la explicación. Lo que sucede es que Gerente con la expresión 'super' si está utilizando los métodos getSalario() y getBonificacion(), de la clase padre que es Funcionario, mientras que Contador no los utiliza en este caso. Agradezco a Johan por haberme impulsado a volver a revisar...