De nuevo hablamos de interfaces. Vemos un poco sobre los casts. Un tema amplio pero no muy dificil de entender, los constructores. Y finalmente vemos la palabra reservada static.
Casting
- Existen dos tipos de cast.
- El primero downcasting (hacia abajo), sucede cuando se tiene una referencia más general y se desea una referencia a una subclase. Se debe realizar explícitamente el cast para que funcione y así poder accesar con esta nueva referencia a los miembros de la subclase.
- El upcasting (hacia arriba) funciona implícitamente (no se tiene que escribir) ya que cuando se realiza estas restringiendo el número de métodos que puedes invocar.
No te dejes engañar por código que muestre una clase concreta que declara haber implementado una interfaz pero no exista código que lo haga. Antes de decir que el código no es valido cabe mencionar que las superclases de ella pueden haber implementado esas interfaces.
Una clase puede implementar más de una interfaz. Es válido decir
public class Pelota implements Serializable, Runnable, Rebotable
{ ... }
Una interfaz puede extender (heredar) otra interfaz, pero nunca implementarla.
public interface Rebotable extends Movible { } // ok!
Una interfaz si puede extender (heredar) más de una interfaz
public class Programador extends Empleado, Trabajador { } // Illegal!
Aquí sí
public interface Rebotable extends Movible, Esférica { } // ok!
Regresando valores
- Puedes regresar null en un método que tenga un objeto como tipo de retorno.
- Un arreglo es un tipo legal de tipo de retorno
- En un método con un tipo primitivo de retorno, puedes regresar un valor o una variable que pueda ser implícitamente convertida (sin cast) en el tipo de retorno declarado.
- En un método con un tipo primitivo de retorno, puedes regresar un valor o una variable que pueda ser explícitamente convertida (usando un cast) en el tipo de retorno declarado.
- No debes de regresar ningún valor o variable de un método declarado como void.
- En un método con un tipo de retorno objeto, puedes regresar un cualquier objeto que pueda ser implícitamente convertida (sin cast) en el tipo de retorno
Constructores
- Los constructores pueden usar cualquier modificador de nivel de acceso, incluyendo private.
- El nombre del constructor debe ser el mismo que el nombre de la clase.
- Los constructores no tienen un valor o tipo de retorno.
- Es valido (pero sin sentido) tener un método con el mismo nombre de la clase, esto no lo hace un constructor. Si tiene un valor de retorno entonces es un método.
- Si no escribes un constructor en tu clase, entonces el compilador te hará uno automáticamente.
- El constructor generado por default nunca tendrá parámetros
- Si quieres un constructor sin argumentos, pero ya creaste otros constructors en tu clase, el compilador NO te proveerá de un constructor automáticamente. Así que tendrás que escribirlo tu mismo.
- Cada constructor tiene en su primera línea de código una llamada a un constructor sobrecargado (this()) o una llamada al constructor de la superclase (super()) aunque esta llamada puede ser insertada por el compilador (como primera línea de código)
- Una llamada a super() puede ser con o sin argumentos dependiendo del constructor de la superclase.
- No puedes hacer una llamada a un método de instancia o acceso a una variable hasta después de que el constructor de la super clase haya sido ejecutado
- Solo métodos y variables estáticas puede ser accesadas como parte de la llamada a super() o this, por ejemplo super(Animal.NAME) si NAME esta declarada como static.
- Las clases abstractas tienen constructores y son llamadas cuando una instancia de una subclase concretada es creada.
- Las interfaces no tienen constructores.
- Los constructores no se heredan. No son métodos. Y no pueden ser sobrescritos.
- El constructor llama al constructor de la superclase, que llama a su vez al constructor de su superclase y así sucesivamente hasta llegar al constructor Object.
- El constructor Object se ejecuta y regresa al constructor siguiente, hacía abajo de la cadena, hasta el final.
- Las variables y métodos marcados como static pertenecen a la clase, más que a una instancia. De hecho se pueden usar los métodos o variables estáticas sin tener instancias de esa clase
- Un método estático no puede acceder a una variable no estática (de instancia). (Por ejemplo desde main() el cual es un método estático.
- Los métodos estáticos no pueden ser sobreescritos (overriden).
No hay comentarios:
Publicar un comentario