Buenas tardes, interesantisimo el tema de interface, aunque me temo que costará asimilarlo todo.
Antes de nada dos erratas en el texto que vi, la segunda me trajo un poco loco hasta que entendí.
Una clase puede implementar uno o varios interfaces en Java (se indica con extends NombreInterface1, NombreInterface2, …etc.), pero sólo puede extender una clase. Implementar varios interfaces en una sola clase es lo más parecido que tiene Java a la herencia múltiple.
ahí es implements.
c) En algunos casos es igual de viable definir una clase como interfaz que como clase abstracta, pero puestos en esta situación preferiremos optar por una interfaz porque es más flexible y extensible: nos va a permitir que muchas clases implementen la interfaz (aprovechamos la herencia múltiple de las interfaces). En cambio, una clase abstracta sólo nos permite que una clase herede de ella.
sería; una clase solo puede heredar una clase, abstracta (o no) no varías, cosa que si puede implementar varias interfaces. Me obligó a buscar porque clase abstracta, la pueden extender varias clases
Dicho esto, mis respuestas que alguna, no tengo segura del todo.
Preguntaa) ¿Una clase puede heredar de dos clases en Java?
RespuestaNo, una clase solo puede extender una clase, heredar de ella.
Pregunta¿Una interface Java puede tener métodos que incluyan una sentencia while? ¿Una interface Java puede tener métodos que incluyan una sentencia System.out.println?
RespuestaNo y no, solo definen metodos, que deben ser sobreescritos (o en este caso escritos) por las clases que implemente la interface.
Pregunta¿Un objeto Java puede ser del tipo definido por una interface? ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que no implementa la interface? ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que implementa la interface?
RespuestaSí, definido si, inicializado debe ser con una clase concreta.
La segunda pregunta;
Pensandolo diría que no, pues si haces List <String> miLista; luego debe ser inicializada con alguna que implemente List. Pero, y si la clase extiende de ese tipo? aunque no implemente la interface, aunque claro entonces no podria tener las propiedades o metodos de la interfaz. La respuesta es NO.
Y la ultima es sí, como el ejemplo anterior List <String> miLista = new ArrayList <String>();