Certificación SCJP 6 Objetivo 1.1

Hace mucho que surgió en mi cabeza la necesidad de tener la certificación de Java, por el momento no cuento con alguna, desgraciadamente no había tenido espacio de dar una leída al libro de Katy Sierra recomendado, pero aprovechando las circunstancias de mi actual trabajo trataré de publicar a diario un avance de los objetivos del libro con tres propósitos:

Publicaré las notas de estudio para que los interesados en realizar esta certificación sirva de refuerzo o impulso, esperando que algunos de los que ya están certificados puedan ayudar a temas que sean importantes, difíciles o se vayan escapando.

Objetivo 1.1 Declaración de interfaces

Una interfaz es un contrato (Conjunto de requisitos que deben satisfacer las clases que se ajusten a esa interfaz).

Al crear una interfaz, estamos definiendo un contrato para lo que una clase puede hacer, pero sin indicar como lo va a hacer.

Se puede pensar en una interfaz como en una clase que es 100 % abstracta.

Los métodos declarados en una interfaz son automáticamente públicos y abstractos, por lo tanto no es necesario escribir las palabras   o   en la declaración del método.

Todas las variables definidas en una interface son   y   , por lo que podemos decir que en una interfaz se declaran solo constantes, no se instancia variables.

Aunque algunos programadores acostumbran declarar las interfaces como   al igual que los campos como  , la Java Language Specification recomienda no incluir palabras reservadas redundantes.

Aunque los métodos declarados en una interfaz son automáticamente públicos cuándo se implementa la interfaz es preciso declarar el método como  . En caso contrario, el compilador supone que el método tiene visibilidad de paquete, que es el comportamiento predeterminado para una clase. Entonces el compilador protesta porque estamos intentando proporcionar un privilegio de acceso más débil.

La razón de usar interfaces es que Java tiene comprobación estricta de tipos.

Cuando se hace una llamada a un método, el compilador necesita ser capaz de averiguar si el método existe realmente.

Se debe aclarar que las interfaces no son clases. Nunca se utiliza el operador new para crear un ejemplar de una interfaz

 

Sin embargo, aun cuando no se pueden construir objetos de una interfaz, sigue siendo posible declarar variables de tipo de interfaz.

 

Las variables de interfaz tienen que referirse a un objeto del tipo de una clase que implemente la interfaz:

 

Lo que no se debe hacer en una interfaz:

1 Los métodos nunca se implementan en la interfaz.
2 La interfaz no tiene campos de ejemplar.

La aportación de campos e implementaciones de métodos es tarea de las clases que implementen esa interfaz.

No se pueden declarar campos ni métodos estáticos en una interfaz, aunque es posible aportar constantes en ellas. Por ejemplo:

 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de neko069

Duda

Duda con ésta aseveración:

Los métodos declarados en una interfaz son automáticamente públicos y abstractos, por lo tanto no es necesario escribir las palabras public o abstract en la declaración del método.

Y ésta:

Aunque los métodos declarados en una interfaz son automáticamente públicos cuándo se implementa la interfaz es preciso declarar el método como public. En caso contrario, el compilador supone que el método tiene visibilidad de paquete, que es el comportamiento predeterminado para una clase. Entonces el compilador protesta porque estamos intentando proporcionar un privilegio de acceso más débil.

Según yo la segunda es mentira.

@Neko, en todo caso sería

@Neko, en todo caso sería impreciso o incorrecto. Pero no, lo que dice 043h68 es correcto en ambos casos.

Imagen de neko069

:-O

Errr ... pero, a ver, entonces, sí ando medio confundido o no he entendido bien.

Se supone que puedo hacer ésto:

 
Peeeeeero, entonces, si al método NO le agrego el   entonces se vuelve  ???
Éso fué lo que entendí, lo cual en todo caso no es así, aunque no coloques el modificador  , se queda  .

Es que es cuando se

Es que es cuando se implementa la interfaz:

 

Imagen de neko069

Get it

Ah va, la palabra clave es implementación. Thanks a lot Mr. Ryz.

Está bien en el comportamiento de interface

 

Cuandop declaras un método en   se dice que debe ser publico porque el objetivo de las interfaces es que definas un comportamiento general. Si haces un método   o peor aun   no estas definiendo un comportamiento general ya que es especifico de las clases del mismo paquete o de una sola clase. Por eso los métodos de una interface son publicos y cuando los implementes tambien lo deben de hacer... tambien las "variables" de una interface tienen un comportamiento especial, nota que si declaras una "variable" en una interface automaticamente es   porque (dado el ejemplo anterior) no puedes hacer   porque es   y por ende no puedes crear una instancia de ella por lo que no puedes guardar estados.