martes, 30 de septiembre de 2008

Star all over again

Bueno les Cuento de rapido que el manual que me estaba leyendo es para el examen version 1.4 y actualmente el que ponen es el 1.6, ya encontre un nuevo manual para la 1.6 y estare subiendo mis apuntes en español en esta pagina.... Bueno a empezar de nuevo :D

domingo, 28 de septiembre de 2008

Implementacion de la interface

  • Las interfaces son como contratos que nos dicen que tenemos que hacer, pero no nos dicen como hacerlo

  • Las interfaces pueden ser implementadas por cualquier clase de cualquier arbol de herencia

  • Una interface es como una clase 100% abstracta y es implicitamente abstracta, escribas el modificador "abstract" o no

  • Una clase abstracta puede solo tener metodos abstractos, no son permitidas clases concretas

  • Las interfaces son por default public y abstract, lo escribamos implicitamente asi o no

  • Las interfaces pueden tener constantes que son implicitamente public, static y final

  • Poner el "public", "static", y/o "abstract" en las variables es opcional, pero se pongan o no se pongan siguen siendo public,static y final

  • Una clase concreta que implemente una interfaz debe de:
    -->Proveer una implementacion completa para todos los metodos de la interface.
    -->Seguir todas la reglas legales para sobreescribir los metodos que implementa.
    -->no debe declarar ninguna nueva "checked exception" para la implementacion de un metodo.
    -->No se debe declarar ninguna excepcion que no se encuentre dentro de las excepciones que ya se declararon en la interfaz.(osea que no sea una subclase o la clase misma que se declaro)
    -->Debe declarar las "runtime exception" de cualquier implementacion de los metodos de la interface, sin importar la declaracion de la interfaz
    -->Debe de conservar los mismos argumentos y tipos de retorno que ya se definieron

  • Una clase que implementa a una interfaz puede ser en si misma abstracta

  • Una clase abstracta que implementa una interfaz no esta obligada aimplementar los metodos de la interfaz(Pero la primera clase concreta si debe)

  • Una clase solo puede extender de otra clase, pero puede implementar muchas interfaces

  • Una interfaz puede extender una o mas interfaces

  • Una interfaz no puede extender una clase ni implementar clases ni interfaces

  • Cuando estemos haciendo el examen lo primero que debemos hacer es verificar si las declaraciones de las clases son validas, antes de hacer lo demas
  • java.lang.Runable

  • Tenemos que memorizar que java.lang.Runable es una interface que contiene un metodo que tenemos que implementar public void run{}
  • Propiedades del main()

  • Debe de ser estatico("static")

  • Debe de tener un "void" como tipo de retorno

  • Debe de tener un Arreglo de strings de argumento, el nombre puede ser cualquiera, aunque normalmente se pone args[]

  • solo para propisitos del examas vamos a asumir que el metodo main debe de ser publico

  • Sino llamamos correctamente al main(), nos manda un runtime exception(error al momento de la ejecucion)

  • En la declaracion del metodo main() los modificadores static y public pueden cambiarse de orden y el args puede cambiarse de nombre

  • Pueden existir otros metodos main pero el compilador solo buscara el que sea public static void main(args[])
  • Reglas de declaración

  • Solo puede existir una clase publica por archivo de codigo

  • Si el archivo de codigo contiene una clase publica, esta debe de tener el mismo nombre que el del archivo

  • Un archivo puede tener solo una sentencia "package" pero muchos imports

  • La sentencia "package"(si existe) debe de estar al principio del codigo

  • La sentencia "import"(si existe) debe de estar despues del package y antes de la declaracion de la clase

  • Los "package" y los "imports" aplican a todos los componentes de la clase

  • Un archivo puede tener mas de una clase no publica

  • Los archivos sin una clase publica no tienen restriccion en cuanto al nombre

  • En un archivo las clases pueden estar en cualquier orden

  • Las sentencias "imports" solo solo proveen una atajo para los nombres completos qualificados

  • Los imports no causan problemas de rendimiento y no incrementan el tamaño del codigo

  • Si usamos un metodo de otra clase, pero no la importamos debemos usar el nombre comppleto ej: java.util.ArrayList jua = new java.util.ArrayList()

  • Los imports y los nombres completos pueden coexistir

  • Los imports que terminan con ".*;" estan importando todas las clases del paquete

  • Los imports que terminan con ";" estan importando una sola clase

  • Debemos uasar el nombre completo cualificado cuando importamos dos clases que tienen el mismo nombre
  • Variables y metodos estaticos(static)

  • No estan "unidos" con ninguna instancia en particular

  • No necesita existir una instacia de una clase para poder usar una variable o metodo estatico

  • Solo existe una copia de una variable estatica por clase y todas las instancias los comparten

  • Las variables estaticas obtienen los misvos valores por default que las variables de instancia

  • Un metodo estatico (Como main()) no puede acceder a una variable no estatica

  • Podemos acceder a los miembros estaticos usando el nombre de la clase nombreDeLaClase.nombreDelMetodo()

  • tambien podemos acceder a un metodo estaitico utilizando una instancia de una referencia a una variable algunObjeto.nombreDelMetodo(), pero esto es una pequeña "trampa", por que no por que el metodo no va a tomar en cuenta para nada al objeto que lo esta invocando

  • Los metodos estaticos no pueden ser sobreescritos("overriden"), sin embargo pueden ser redeclarados o redefinidos por una subclase,Osea aunque aveces el metodo estatico puede aparentar estar sobreescrito, el polimorfismo no se aplica
  • Otros modificadores de acceso para miembros

  • Los metodos finales no pueden ser sobreescritos en una subclase

  • Los metodos abstractos tienen que ser declarados con un tipo de retorno y los argumentos, pero no deben de ser implementados

  • los metodos abstractos terinan con punto y coma no con llaves ejemplo: anAbstractMethod();

  • Hay 3 formas de reconocer que un metodo no es abstracto
    -->El metodo no esta marcado como abstracto
    -->El metodo tiene llaves "{}"
    -->El metodo tiene codigo entre las llaves

  • La primera clase concreta que extienda a una clase abstracta debe de implementar todos los metodos abstractos de esta clase y de sus clases padres en caso de que estas existan y sean abstractas

  • Los metodos abstractos deben de ser implementados por alguna subclase, por esta razon:
    -->Los metodos abstractos no pueden ser private
    -->Los metodos abstractos no pueden ser final

  • El modificador Synchronized aplica solo a metodos

  • Los metodos sincronizados pueden tener cualquier modificador de acceso y tambien pueden ser marcados como final

  • Los metodos sincronizados no pueden ser abstractos

  • El modificador native se aplica solo a metodos

  • El modificador strictfp aplica solo a metodos y clases

  • Las variables de instancia pueden
    -->tener cualquier modificador de control
    -->Ser marcdas como final o transient

  • LAs variables de instancia no pueden ser declaradas abstract, syncronized, native ni strictfp

  • Es legal llamar a cualquier variable local con el mismo nombre de una variable de instancia, esto se le conoce como "shadowing"

  • LAs variables finales tienen las siguientes propiedades:
    -->Las variables finales no pueden ser reinizializadas cuando se les agrega un valor
    -->Las referencias finales no pueden apuntar hacia un objeto diferente una vez que han sido asignadas a un objeto.
    -->Las referencias fiales deben de ser inicializadas antes que el constructor se complete.

  • No existe un "Objeto final", el hecho de que una referencia sea final, no sognifica que no podamos cambiar el valor del objeto

  • El modificador trancient aplica solo a variables de instancia

  • El modificador volatile aplica solo a variables de instancia
  • Variables Locales

  • Las variables locales no pueden tener modificadores de acceso

  • Final es el unico modificador de acceso que pueden tener las variables locales

  • Las variables locales no obtienen valores por default, por eso tienen que ser inicializadas antes de usarse
  • Modificadores de acceso de miembros

  • Los metodos y las variables de instancia son consideradas como miembros

  • Los miembros pueden usar los 4 modificadores de acceso: public, private, "default" y protected

  • Podemos acceder a los miembros de 2 formas:
    -->Mediante codigo dentro de la clase para acceder a un miembro de otra clase
    -->Mediante herencia cuando accedemos a los "miembros de la clase padre"

  • Si no podemos acceder a una clase, no podemos acceder a sus "miembros"

  • Hay que determinar la visibilidad de la clase antes de determinar la visibilidad del "miembro"

  • Los miembros public pueden ser accedidos por todas las clases, incluso si se encuentran en paquetes diferentes

  • Si el miembro de una superclase es publico, sus hijos lo heresan, sin importar el paquete en el que se encuentren

  • Los miembros que son accedisos sin unsar el operador punto(.) deben de pertenecer a la misma clase

  • this. Siempre se refiere al objeto que se esta ejecutando en el momento que es invocado

  • this.unMetodo() es lo mismo que simplemente escibir unMetodo()

  • Los miembros privados, pueden ser accedidos solamente por codigo en la misma clase

  • Los miembros provados no son visibles en las subclases, por lo tanto los miembros privados no son heredados

  • Los miembros default y protected solamente son diferentes cuando se esta hablando de las subclases
    -->Los miembros defult solo pueden ser accedidos por clases en el mismo paquete
    -->Los miembros protected, pueden ser accedidos por las clases en el mismo paquete y las subclases sin importar en que paquete se encuentren.

  • Protected = paquete mas hijos(osea subclases)

  • Para subclases fuera del paquete los miembros protected pueden ser accedidos solo por medio de herencia,una subclase fuera del paquete no puede acceder a un miembro protected usando una referencia a una instancia de la superclase(osea solo pueden acceder por herencia)

  • Un miembro protected heredado mediante herencia a otra subclase, se vuelve practicamente privado a las clases que accedan a la subclase

  • otros Modificadores de clases.

  • Las clases tambien pueden serfinal,abstract o strictfp

  • Una clase no puede ser final y abstract

  • una clase final no puede ser una subclase

  • Una clase abstracta no puede ser instanciada

  • Si existe un solo metodo abstracto en una clase, se debe marcar toda la clase como abstracta

  • Una clase abstracta puede tener tanto metodos abstractos como concretos(no abstractos)

  • La primera clase concreta en extender una clase abstracta debe de implementar todos sus metodos
  • Clase y modificadores de acceso

  • Existen 3 modificadores de accceso public private y protected

  • Existen 4 niveles de acceso, public, protected, "default y private

  • Las clases solo pueden tener acceso publico o default

  • Que una clase sea visible por otra significa que puede
    -->Crear una instancia de la otra clase
    -->Extender la otra clase
    -->Acceder a los metodos y las variables de la otra clase