¡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!