Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

Funcionario jose = new Contador(); ...vs... Contador jose = new Contador();

Hola, Cuál seria la diferencia en cuanto a su utilidad, funcionalidad, practicidad, beneficios, pros y contras, etc; entre Funcionario jose = new Contador(); y Contador jose = new Contador();. ¿Qué podría hacer con un objeto creado de una de esas formas que a la vez no podría hacer con un objeto creado de la otra? Si además de la explicación pudieran dar ejemplos prácticos con código quedaría más satisfecho.

Muchas gracias.

2 respuestas

¡Hola Estudiante!

La diferencia entre Funcionario jose = new Contador(); y Contador jose = new Contador(); es que en el primer caso estás creando una instancia de la clase Contador, pero la estás almacenando en una variable de tipo Funcionario. En el segundo caso, estás creando una instancia de la clase Contador y la estás almacenando en una variable de tipo Contador.

La principal ventaja de usar Funcionario jose = new Contador(); es que puedes tratar al objeto jose como si fuera un Funcionario, lo que significa que puedes llamar a los métodos de la clase Funcionario y a los métodos que haya implementado Contador. Por ejemplo, si la clase Funcionario tiene un método trabajar(), y la clase Contador tiene un método calcularImpuestos(), podrías llamar a ambos métodos en el objeto jose.

Por otro lado, si usas Contador jose = new Contador();, solo puedes tratar al objeto jose como un Contador. Esto significa que solo puedes llamar a los métodos que haya implementado Contador.

Aquí te dejo un ejemplo práctico:

Supongamos que tienes las siguientes clases:

public class Funcionario {
    public void trabajar() {
        System.out.println("El funcionario está trabajando");
    }
}

public class Contador extends Funcionario {
    public void calcularImpuestos() {
        System.out.println("El contador está calculando impuestos");
    }
}

Si creas un objeto jose de esta manera: Funcionario jose = new Contador();, podrías llamar a los métodos trabajar() y calcularImpuestos() de la siguiente manera:

jose.trabajar(); // Imprime "El funcionario está trabajando"
((Contador)jose).calcularImpuestos(); // Imprime "El contador está calculando impuestos"

Si creas un objeto jose de esta manera: Contador jose = new Contador();, solo podrías llamar al método calcularImpuestos() de la siguiente manera:

jose.calcularImpuestos(); // Imprime "El contador está calculando impuestos"

Espero haber ayudado y buenos estudios!

Hola Eric, Gracias por tomarte el tiempo para responder. El primer párrafo de tu respuesta es la mejor explicación teórica que he visto hasta ahora de este tema.

Sin embargo en la parte práctica sobre la diferencia entre ambos, en realidad en el segundo caso también se puede usar el método trabajar() de la clase Funcionario, ya que Contador hereda los métodos de Funcionario. Si se crea un objeto de la siguiente manera Contador jose = new Contador();, se podrá llamar a los métodos trabajar() y calcularImpuestos() de la siguiente manera:

jose.trabajar(); // Imprime "El funcionario está trabajando"
jose.calcularImpuestos(); // Imprime "El contador está calculando impuestos"

Entonces por lo que veo aun no encuentro una diferencia práctica entre ambas formas Funcionario jose = new Contador(); y Contador jose = new Contador();