Esta pregunta ha sido revisada gracias a
Array, aportación de junio de 2013. Gracias!
Si ponemos el enunciado completo creo que mejor.
Pregunta 9 ¿Qué tipo de acceso se puede emplear para sobrecargar los métodos que implementan una interfaz?
a) Pueden ser métodos con acceso public y private, pero no protected
b) Sólo pueden ser con acceso public
c) Sólo pueden ser con acceso private
d) Pueden emplear cualquier tipo de acceso de Java
RESPUESTA CORRECTA: la d)
Si revisamos las definiciones formales de sobrecarga y sobreescritura tendríamos:
Sobrecarga: Cuando más de un constructor o método tienen el mismo nombre pero distintos parámetros decimos que el constructor o método está sobrecargado. La sobrecarga de constructores o métodos permite llevar a cabo una tarea de distintas maneras (por ejemplo crear un objeto Persona con un nombre ya establecido o crearlo sin nombre establecido).
Sobreescritura: Decimos que un método está sobreescrito cuando está presente, exactamente con la misma signatura, en una subclase y en una superclase.
Inicialmente pensábamos que la respuesta era la b), pero por confusión entre sobrecarga y sobreescritura. Ahí estaba "el desliz": solo se puede sobreescribir con acceso public, en cambio la sobrecarga (mismo método con distintos parámetros) se puede hacer usando cualquier tipo de acceso.
Usando este código:
interface A {
public void C();
}
public class B implements A{
public void C(){}
private void C(int b){}
}
Comprobamos que el método definido en la interfaz se puede sobrecargar con cualquier tipo de acceso.
En cambio solo se puede sobreescribir con acceso public: si usamos este código de prueba
public class PerezosoTest implements Comparable{
public static void main (String[] Args){
System.out.println ("Probando");
}
public int compareTo(Object o) {
//Prueba
return 1;
}
}Comprobaremos que el intentar sobreescribir el método con protected o private no es permitido.
Recordar una cosa: en una interface todo método es abstracto y público sin necesidad de declararlo.
Un método de una interface no se puede sobreescribir basándonos en un tipo de acceso menos amplio que aquel que se tiene en la interfaz, que es public.
Sin embargo, sí se puede sobrecargar usando otros tipos de acceso.