Bien, sigamos.
Vamos a ver algunas características importantes de las interfaces, pero que son de la versión de Java
8 implementadas en ya 8.
Básicamente son dos características, una solo métodos default que podemos implementar en una interfaz
y también métodos estáticos.
Bien, había mencionado que las interfaces no puede tener métodos implementado.
Bueno, eso es en esencia y en el más puro y cristalino estado de una interfaz implementación que básicamente
es un protocolo método sin implementar.
Entonces, cuando hablamos de atracción pura es eso comportamiento y no debería tener menos implementado.
Pero no a carácterísticas.
Podemos tener métodos implementados por default, pero más que dar una implementación por defecto,
un comportamiento es para que las clases hijas no estén obligada a implementar todos los métodos.
La interfaz.
Claro, porque una interfaz podría tener muchos métodos y obligaría obliga a cada clase hija concreta
a implementar estos métodos.
Puede que algunos sean obligatorios y otros no. Cuando son obligatorio, bueno, son la firma tal como
lo tenemos acá sin cuerpo, pero también podríamos tener alguno que no sean obligatorio y poder tener
una implementación default.
Veamos el ejemplo.
Mucho mejor.
Voy a modificar este método.
Entonces vamos a hacer ahora que este método sea default.
Entonces, con el modificador default default, simplemente sin el public no necesario, sigue siendo
público.
Y acá colocamos un cuerpo, quitamos el punto y coma y las llaves.
Y ahí tenemos una implementación.
Por ejemplo return,
imprimiendo valor por defecto y listo.
Ahí tenemos el método interfaz default.
De esta forma ya, por ejemplo, las clases hijas como cualquiera.
Vamos a colocar el libro, da lo mismo.
No estaría obligado a implementar este método de la interfaz.
Incluso lo podríamos comentar.
Se fijen y no marca error.
Por qué?
Porque es default.
Ya tienen implementación en la interfaz por defecto.
Básicamente para dar una compatibilidad a la clase concretas y que éstas no estén obligada a implementar
este método.
Pero insisto, solamente lo aplicamos cuando el método sea opcional.
Es decir, no sea realmente requerido que la clase cija lo implementen.
Ahora, si realmente requerido con una implementación propia en cada una diferente.
Hoy no. Hoy lo dejamos como lo teníamos, sin el default.
Entonces, para repasar, se quitó el default y lo dejamos sin el cuerpo con el punto y coma.
Mark No acepto porque livro esta obliga a implementar el método, ya que lo tengo comentado.
Si lo implementamos no da error.
Vuelvo atrás, voy a comentar.
Se fijen.
Entonces ahora dale error.
Nos vamos a imprimible y lo dejamos en ti, Follet.
Y ya no da error.
Ya no está obligada.
Se fija.
Ahora, si levantamos nos vamos a ejemplo.
Imprenta por acá.
Rahn.
El libro imprimiendo un valor por defecto.
Eso se va a imprimir, se fijan en vez de imprimir toda la implementación LIER Ya que no lo estamos
criando, no lo estamos reemplazando ahora, obviamente si libro da su propia implementación con el
all right.
Y todo esto si escribimos el método.
Nos vamos a ejemplo.
Ahora se imprime el libro con su implementación propia.
Se fijan entonces bueno, solamente para dar una implementación por defecto.
Ahora, qué pasa, por ejemplo, con Curriculo?
Vamos a ver.
O con informe da lo mismo.
Voy a comentar acá.
Bueno, de error.
Por qué da error si tenemos una implementación por defecto en la interfaz?
Bueno, por la clase abstracta, te digan, porque la clase abstracta también tiene el método abstracto
imprimir y la clase abstracta hola es la que está obligando a imprimir el método, se fijan, pero no
la interfaz.
Entonces ya es un tema de la clase abstracta.
De hecho, si lo comentábamos.
Volvemos al currículum.
Ya no da error, pero no la idea solamente para demostrar, entonces es la clase tracta la responsable
del error y no la interfaz.
Entonces, ahora precontrato de la clase padre Hola.
Es decir, currículum está obligada sí o sí a implementar siempre el método imprimir independiente,
si es difícil o no en interfaz.
Perfecto, entonces, para el ejemplo volvemos a interfaz, lo podemos dejar así o como estaba antes.
Da lo mismo.
Lo importante era ver este tema, que podemos tener métodos de fold.
Pero si también podemos tener métodos estáticos, muy parecido con static, igual que un método estático
en una clase, pero sin el public.
El public no es obligación y por defecto público todos usamos static.
Igual tiene sentido porque recuerden que el método estático static le pertenecen a la clase, no a la
instancia.
Y no podemos tener una instancia, una referencia de una interfaz, pero sí podríamos tener un método
estático de la interfaz que le pertenezca a la interfaz.
Obviamente no lo objeto, pero sí la interfaz que podemos utilizar este método estático a través de
la interfaz.
Bueno, un ejemplo sencillo incluso mira, vamos a ir a ejemplo imprenta.
Acá tenemos un método estático, se fijan?
Lo voy a cortar tal cual para el ejemplo, nada más lo voy a cortar de la clase con el método main ejemplo
prenta y lo voy a pegar acá.
Perfecto.
Fija no da error.
Está bien el public.
De hecho, lo podríamos quitar.
Podría ser vey o podría retornar algún tipo de dato.
Da lo mismo, pero tiene que ser estático.
Método propio que le pertenecen al interfaz.
Entonces ahora en ejemplo.
Usamos imprimir a través del nombre el interfaz imprimible punto.
DC.
De ahí no hay ningún error.
Entonces la interfaz tiene un método default, pero también métodos estáticos.
Déjalo, utilizamos.
Se fijan, funciona perfecto.
Incluso podríamos importar imprimible.
De forma estática.
Import static.
Org punto A. Guzmán Bueno, imprenta modelo.
Buscamos la interfaz imprimible.
Ahí la tenemos.
Punto el método imprimir.
Punto y coma.
Es decir, importamos el método estático.
Imprimir.
Bajamos y acá ya la podemos quitar.
Entonces queda como si fuera un método estático de la clase, pero en realidad es la interfaz, pero
lo importamos.
Qué otra característica de las interfaces?
Bueno, también puede tener atributos que sean constantes.
Es decir, final y estática, por ejemplo public final static.
Bueno, incluso el public se puede omitir, ya que es redundante, igual que los métodos.
Entonces simplemente final static del tipo.
Por ejemplo, es trinco una constante tipo string.
Por ejemplo, texto en mayúscula defecto.
Igual voy a cortar esto.
Y lo dejamos acá, algunos bastante cualquiera.
Y acá retornamos la constante texto de efecto.
Se fijan?
Puede tener una constante, incluso este constante bueno, la estamos utilizando acá, pero también
la podemos utilizar afuera.
Por ejemplo, acá shout imprimible, punto.
La constante.
Acá tenemos el método estático imprimir.
Lo estamos invocando de forma estática acá.
Y también el texto de efecto.
Imprimiendo un valor por defecto.
Lo mismo también se puede importar.
Ya sea de forma separada.
Poco, pero esto lo pegamos acá hoy día la constante.
Entonces ya puedo quitar esto.
O bien, como estamos importando de forma estática dos elementos, dos miembros el método imprimir y
texto de efecto asterisco también.
Te tenemos imprimiendo un valor por defecto, una constante.
Bueno, son características de las interfaces.
Lo que sí, cuando tenemos un método de default, en este caso deja nuestro diseño más débil en el sentido
de que no aplica la abstracción pura, lo deja más liviano, más flexible.
En el fondo, ese que lo pueda o no imprimir da lo mismo, porque tiene una implementación por defecto
en la interfaz algun@.
En este caso contexto, pero sí en el caso de la impresora imprimible.
Quizás lo ideal sería que no fuera alta, es decir, que ha obligado a implementar este método, ya
que cada uno lo tienen que implementar de forma propia, de forma distinta.
Pero es bien, lo quiero dejar así solamente para el ejemplo, para que vean que puede ser o que podemos
tener un método de fold y también estático.
Bueno, eso quería explicar a otro tan importante que acá incluso nos dice que final static es redundante
para atributos o Campora interfaces, incluso lo podemos dejar así más simple.
Se fijan String y el tipo y por defecto ya es final y static se fijan.
Es redundante, claro, porque una interfaz solamente puede tener atributos, solamente que sean finales
y estáticos.
Obviamente porque no es un objeto, no es una instancia.
Y hasta terminar.
Quería ver también otro ejemplo.
Vámonos acá.
Ejemplo imprenta.
Voy a crear una instancia de imprimible, pero esta instancia se de una clase anónima que voy a crear
al vuelo.
Se acuerdan de clase anónima que vimos en la clase?
Es abstracta.
Bueno, acá también se puede implementar, por ejemplo imprimir new imprimible.
Voy a crear una clase anónima al vuelo de imprimible.
Incluso acá me lo autocompletar imprimible, aunque también puedo hacer a mano los paréntesis y las
llaves se fijan.
Ahí tenemos.
Acá implementamos una clase anónima que implementa la interfaz imprimible al vuelo, ya que podemos
crear clases anónimas a partir de componentes abstracto, ya sea una clase abstracta, una interfaz
y la implementa al vuelo.
Acá podríamos sobrescribir los métodos, por ejemplo el imprimir que el default de hecho como default
no da error, no cierto.
Acá no da error porque lo podemos utilizar.
Pero qué pasa si no fuera alto?
Bueno, estaríamos obligados, esto solamente para el ejemplo, nada más.
Estaríamos obligado a implementar este método acá.
Se fijan?
Daría error y lo tengo que implementar.
Acá y darles la propia forma para imprimir, se fijan.
Pero como difficult no es necesario, lo deja como estaba de fold se fijan, no necesario.
Entonces imprimo esto.
Quiero imprimir el texto por defecto si lo ejecutamos.
Imprimiendo el texto por defecto, se imprimió dos veces porque se imprime acá y se imprime acá.
Acá implementé la interfaz al vuelo.
Pero también podríamos crear una instancia de imprimible objeto imprimible.
Da lo mismo.
Igual esto y acá.
Punto y coma.
Ya pasó esto, el objeto en primicia sería lo mismo.
Incluso podría sobrescribir el método por acá Gene doit o de right.
Imprimir OK.
FICAN Hola, que tal imprimiendo un objeto genérico de una clase anónima?
Veamos.
Hola, que tal imprimiendo un Egipto genérico de la clase anónima, pero también puede crear un objeto,
una variable o también esto mismo lo paso por argumento, si es final es lo mismo, creó el objeto.
Acá lo tenemos o bien corto esto y lo pegamos acá.
Exactamente lo mismo se fijan acá lo tenemos completamente al vuelo.
Bien, lo voy a dejar así esto acá.
Lo de quitar.
Pero recuerden, esto no se puede reutilizar solamente si lo vamos a implementar una sola vez en alguna
clase puntual y listo.
Nada más.
Ahora sé que si terminamos y continuamos en las siguientes clases.