Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

IDE no detecta falta de métodos implementados en tiempo de compilación

Hola, Se tiene la interface:

public abstract interface Autenticacion {

    public abstract void setContraseña (int contraseña);

    public abstract boolean autenticar (int contraseña);

}

Se entiende que no hace falta necesariamente la palabra abstract en la interface, todos sus métodos son abstractos sin necesidad de escribir esa palabra.

Se tiene la clase:

public abstract class Funcionario {

    private String nombre;
    private String documento;
    private double salario;
    private int contraseña;

    public Funcionario() {

    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getDocumento() {
        return documento;
    }

    public void setDocumento(String documento) {
        this.documento = documento;
    }

    public double getSalario() {
        return salario;
    }

    public void setSalario(double salario) {
        this.salario = salario;
    }

    public abstract double getBonificacion();


    public void setContraseña(int contraseña) {
        this.contraseña = contraseña;
    }

    public boolean autenticar (int contraseña) {
        return this.contraseña == contraseña +1;
    }


}

Y se tiene la clase:

public class Administrador extends Funcionario implements Autenticacion {

    private int contraseña;

    @Override
    public double getBonificacion() {
        return 0;
    }

}

Hasta este punto el IDE no detecta errores, a pesar que falta implementar los métodos setContraseña y autenticar en la clase Administrador, se supone que la clase Administrador está obligada a implementar esos métodos de la interface Autenticacion. Se guardaron todos los cambios, e intenté diferentes cosas con tal de obtener el error o descubrir el por qué.

Entonces al borrar "extends Funcionario" el IDE detectó el error:

public class Administrador implements Autenticacion {

    private int contraseña;

    @Override
    public double getBonificacion() {
        return 0;
    }

}

Y en este caso se muestra el error y la palabra Administrador queda subrayada, y al pasar el mouse por la palabra Administrador el IDE me ofreció la opcion de implementar los métodos de setContraseña y autenticar para solucionar el error de compilación.

¿Esto significa que la clase Administrador al heredar los métodos setContraseña y autenticar de la clase Funcionario ya no necesita declarar los métodos que debe implementar de la interface Autenticacion? ya que tienen la misma firma, entonces el IDE asume que esos métodos heredados, y a pesar de no estar explícitamente declarados, están a su vez ya siendo implementados de la interface Autenticacion.

2 respuestas
solución!

¡Hola Estudiante!

Es posible que el IDE no esté detectando este error debido a que la clase Funcionario ya implementa los métodos de la interfaz Autenticacion. Sin embargo, esto no significa que la clase Administrador no tenga que hacerlo también para el funcionamiento adecuado del programa.

Espero haber aclarado tu duda. ¡Buenos estudios!

Hola Eric, gracias por tu respuesta.

Precisamente me refiero en este caso que aparentemente la clase Administrador no necesita declarar explícitamente los métodos setContraseña() y autenticar() como la interfaz Autenticacion lo exige, ya que los hereda de la clase Funcionario, y por lo tanto ya se encuentran implicitamente en la clase Administrador, por lo tanto no hay error alguno y el IDE no detecta ningún error, entonces a menos que se quiera una implementación diferente de esos métodos para la clase Administrador de los que está heredando, no hace falta declararlos en la clase Administrador, el error recién aparece al borrar "extends Funcionario", por lo que en ese momento sí necesitaría declarar obligatoria y explícitamente los métodos setContraseña() y autenticar() en la clase Administrador.

Esto es lo que entiendo por el momento, y creo que te refieres a lo mismo, y cuando dices que no significa que la clase Administrador no tenga que declarar esos métodos te refieres únicamente por las reglas de negocio o en otras palabras la funcionalidad que se desea obtener pero no porque haya algún error correcto?