El examen cubre 6 operadores logicos (&,&&,|,||,^,!)
La mayoria de los operadores logicos trabaja con dos expresiones boleanas(excepto !)
Los operadores && y & deben regresar verdadero solo si ambas expresiones son verdaderas.
Los operadores || y | deben regresar verdadero si solo una de sus expresiones es verdadera.
Los operadores || y && son conocidos como operadores "short-circuit".
Si el operador || encuentra la primera expresion como verdaera ya no verifica la segunda por que a webos la expresion es verdadera.
Si el operador && encuentra la primera expresion como falsa ya no verifica la segunda por que a webos la expresion es falsa.
Los operadores & y | evaluan siempre las dos expresiones.
El operador "^" (XOR) toma la expresion como verdadera si SOLO una de ellas es verdadera.
El operador ! regresa el valor opuesto de la expresion.
martes, 16 de diciembre de 2008
Operador terciario :D
Regresa dos posibles valores dependiendo de si una empresion booleana es verdadera o falsa.
regresa la expresion despues de ? si la expresion es verdadera.
regresa la expresion despues de : si la expresion es falsa.
ejemplo:
String a = (x>7) ? "si" : "no";
regresa la expresion despues de ? si la expresion es verdadera.
regresa la expresion despues de : si la expresion es falsa.
ejemplo:
String a = (x>7) ? "si" : "no";
Operadores de incremento/decremento
Los operadores "--" y "++" si se usan como prefijos se ejecutan antes de que la sentencia se lleve a cabo.
Los operadores "--" y "++" si se usan como sufijos se ejecutan despues de que la sentencia se lleve a cabo.
Ambos operadores son completamente evaluados antes de que el operador es aplicado.
Una variable final no puede usar los operadores "++" ni "--".
Los operadores "--" y "++" si se usan como sufijos se ejecutan despues de que la sentencia se lleve a cabo.
Ambos operadores son completamente evaluados antes de que el operador es aplicado.
Una variable final no puede usar los operadores "++" ni "--".
Operador de concatenacion de Strings
Si solo uno de los operadores es un string el operador "+" concatena el string.
Si todos los operadores son numeros el operador "+" suma los numeros.
Si todos los operadores son numeros el operador "+" suma los numeros.
Operadores Aritmeticos
Hay 4 operadores matematicos primarios, suma(+),resta(-), multiplicacion(*) y division(/).
El operador residuo (%), nos devuelve el residuo de una division.
Los operadores son analizados de izquierda a derecha, al menos que tengan paretesis o que existan algunos operadores que tengan una precedencia mas alta que otra.
Los operadores *,/,% tienen una precedencia mas alta que +,-.
El operador residuo (%), nos devuelve el residuo de una division.
Los operadores son analizados de izquierda a derecha, al menos que tengan paretesis o que existan algunos operadores que tengan una precedencia mas alta que otra.
Los operadores *,/,% tienen una precedencia mas alta que +,-.
Operador instanceOf
Instance of se usa solo con variables de referencia y verifica si objeto es de un tipo especifico.
El operador instanceOf solo lo podemos usar para checar objetos(o null(siempre falso)) que se encuetran dentro del mismo arbol jerarquico.
Por el lado de las interfaces, un objeto pasa el instanceOf de "x" interfaz si implementa "x" o si cualquiera de sus padre implementan "x".
El operador instanceOf solo lo podemos usar para checar objetos(o null(siempre falso)) que se encuetran dentro del mismo arbol jerarquico.
Por el lado de las interfaces, un objeto pasa el instanceOf de "x" interfaz si implementa "x" o si cualquiera de sus padre implementan "x".
Operadores relacionales
El resultado de los operadores relacionales siempre es un valor booleano (true o false).
Existen 6 operadores delacionales (<,<=,>,>=,==,!=), los ultimos dos son comunmente llamados operadores de igualda.
Cuando comparas caracteres, java utiliza el valor 'unicode' de los caracteres como un valor numerico.
hay dos operadores de igualdad (==, !=)
cuatro tipos de cosas pueden ser probadas usando los operadores relacioneles(numeros, booleanos, caracteres y referencias a variables)
Cuando comparas dos referencias a variables regresa "true" solo si las dos referencias refieren al mismo objeto.
Existen 6 operadores delacionales (<,<=,>,>=,==,!=), los ultimos dos son comunmente llamados operadores de igualda.
Cuando comparas caracteres, java utiliza el valor 'unicode' de los caracteres como un valor numerico.
hay dos operadores de igualdad (==, !=)
cuatro tipos de cosas pueden ser probadas usando los operadores relacioneles(numeros, booleanos, caracteres y referencias a variables)
Cuando comparas dos referencias a variables regresa "true" solo si las dos referencias refieren al mismo objeto.
miércoles, 10 de diciembre de 2008
Recolector de Basura. (Garbage Collector)
Java prove un manejo de memoria automatico mediante el recolector de basura(GC).
Solo la JVM es la que decide cuando llamar al GC, nosotros solo podemos sugerirle que lo haga.
No podemos estar seguros de cual es el algoritmo del GC
Los Objetos deben de ser considerados elegible antes de que sean "tirados" por el GC.
No podemos estar seguros de como funciona el algoritmo del GC
Un objeto es elegible cuando ningun hilo(Thread) vivo puede accesar a el.
Para alcanzar un objeto deben tener una referencia viva que apunte hacia ese objeto.
Las aplicaciones en java pueden quedarse sin memoria disponible.
Haces una peticion al garbage collector con System.gc(); (solo antes de java 6)
La clase objeto tiene un metodo finalize().
El metodo finalize() solamente se ejecuta una vez por objeto, solo una vez jeje por lo mucho.
El GC no garantiza que el metodo finalize de todos los objetos se ejecute, este puede no llamarce nunca.
Puede hacer que un metodo no sea elegible para el garbage collectos si usas el metodo finalize() y este no corre(recordemos que el metodo finalize, te hae caso cuando se le pega la gana).
Solo la JVM es la que decide cuando llamar al GC, nosotros solo podemos sugerirle que lo haga.
No podemos estar seguros de cual es el algoritmo del GC
Los Objetos deben de ser considerados elegible antes de que sean "tirados" por el GC.
No podemos estar seguros de como funciona el algoritmo del GC
Un objeto es elegible cuando ningun hilo(Thread) vivo puede accesar a el.
Para alcanzar un objeto deben tener una referencia viva que apunte hacia ese objeto.
Las aplicaciones en java pueden quedarse sin memoria disponible.
Haces una peticion al garbage collector con System.gc(); (solo antes de java 6)
La clase objeto tiene un metodo finalize().
El metodo finalize() solamente se ejecuta una vez por objeto, solo una vez jeje por lo mucho.
El GC no garantiza que el metodo finalize de todos los objetos se ejecute, este puede no llamarce nunca.
Puede hacer que un metodo no sea elegible para el garbage collectos si usas el metodo finalize() y este no corre(recordemos que el metodo finalize, te hae caso cuando se le pega la gana).
Overloading avanzado.
El "widening" de primitivos usa el metodo con el argumento mas pequeño que pueda ser usado.
Usados de forma individual el "boxing" y el "var-args" son compatibles con metodos sobrecargados.
No de puede hacer el widden, de una clase wrapeada a otra(la prueba IS-A falla).
No se puede hacer un "widen" y despues un "box"(un int no puede convertirse en Long).
Si se puede hacer el "box" y despues el "widen"(un int puede convertirse en Object)
No se puede convinar el var-args ni con "widening" ni con "boxing"
Usados de forma individual el "boxing" y el "var-args" son compatibles con metodos sobrecargados.
No de puede hacer el widden, de una clase wrapeada a otra(la prueba IS-A falla).
No se puede hacer un "widen" y despues un "box"(un int no puede convertirse en Long).
Si se puede hacer el "box" y despues el "widen"(un int puede convertirse en Object)
No se puede convinar el var-args ni con "widening" ni con "boxing"
Boxing...
A aprtir de java 5 se puede convertir primitivos en "Wrapers" y "Wrapers" en primitivos automaticamente
usar "==" con "Wrapers" creados mediante "Boxing" es un poco tramposo, aquellos con los mismo valores que sean pequeños(tipicamente valores menores a 127) si son ==, los que son maoyres a estos nos son...
usar "==" con "Wrapers" creados mediante "Boxing" es un poco tramposo, aquellos con los mismo valores que sean pequeños(tipicamente valores menores a 127) si son ==, los que son maoyres a estos nos son...
Uso de "Wrapers"
Las clases "Wraper" son equivalentes a los tipos primitivos
los "Wrapers" tienen dos funciones principales:
Envolver primitivos, para que puedan ser usados como objetos
Proveer varios metodos utiles para los primitivos
Existen tres metos principales para los "Wrappers"
xxxValue() no tiene argumento, regresa un primitivo
parseXxx(String st)tiene un String como argumento, regresa un primitivo
valueOf(String st) toma como argumento un String, regresa un "Wrapper"
Los costructores de "Wrapers" toman un String o un primitivo como argumento, excepto por el de Character, que toma solo un cha.
Radix se refiere a la base, normalmete diferente a 10 por ejemplo 8 o 16
los "Wrapers" tienen dos funciones principales:
Existen tres metos principales para los "Wrappers"
Los costructores de "Wrapers" toman un String o un primitivo como argumento, excepto por el de Character, que toma solo un cha.
Radix se refiere a la base, normalmete diferente a 10 por ejemplo 8 o 16
Bloques de inicializacion.
Los bloques estaticos de inicializacion corren una vez, cuando la clase es cargada.
Los bloques de inicializacion de instancia corre cada vez que una instancia es creada. correan despues de todos los supercostructores ya antes de los constructores.
Si existen multiples bloques de inicializacion siguen las reglas de arriba, pero el criterio de desempate entre estos es el orden en el que esten.
Los bloques de inicializacion de instancia corre cada vez que una instancia es creada. correan despues de todos los supercostructores ya antes de los constructores.
Si existen multiples bloques de inicializacion siguen las reglas de arriba, pero el criterio de desempate entre estos es el orden en el que esten.
Declaraccion, construccion e inicializacion de un arreglo
Los arreglos pueden contener datos primitivos u objetos, pero en si mismos ellos son un objeto.
cuando declaras un arreglo, los corchetes pueden estar a la derecha o a la izquierda del nombre del arreglo.
Nunca se puede inclir el tamaño del arreglo en la declaracion de este.
Debes de declarar el tamaño de este cuando llames al costructor con la palabra new, a menos que crees un arreglo anonimo.
Los elementos dentro de un arreglo no son creados automaticamente, aunque si el arreglo es de primitivos si se les pone el valor de default.
Obtienens un NullPointerException si tratas de acceder a un elemento que no no refiere a un objeto real.
El indice de los arreglos comienza con 0(cero,zero,xrous,zetsfvddfffnfjbsfdchjvdptm)
Un IndexOutOfBoundException ocurre cuando utilizas un indice incorrecto(como negativo o mayor o igual que el numero de elementos que contiene)
Los arreglos tienen una variable lenght que nos dice el numero de elemento que tiene el arreglo.
El ultimo index qque puedes accesar es uno menos que el valor del arreglo.
Arreglos multidimencionales son simplemente arreglos de arreglos.
Las dimenciones en un arreglo multidimencional pueden tener diferentes tamaños.
Un arreglo de primitivos puede aceptar cualquier valor que pueda ser automaticamente promovido al tipo de dato del arreglo.
Un arreglo de objetos puede acepara cualquier valor que pase la prueba IS-A con respecto a el tipo de daro del objeto.
Si asignas un arreglo a otro, ambos arreglos deben de tener las mismas dimensiones para que la asignacion sea exitosa.
Puedes asignar un arreglo a otro que sea un un supertipo del arreglo que estas asignando(por ejemplo puedes asignar un Honda[] a un Car[])
cuando declaras un arreglo, los corchetes pueden estar a la derecha o a la izquierda del nombre del arreglo.
Nunca se puede inclir el tamaño del arreglo en la declaracion de este.
Debes de declarar el tamaño de este cuando llames al costructor con la palabra new, a menos que crees un arreglo anonimo.
Los elementos dentro de un arreglo no son creados automaticamente, aunque si el arreglo es de primitivos si se les pone el valor de default.
Obtienens un NullPointerException si tratas de acceder a un elemento que no no refiere a un objeto real.
El indice de los arreglos comienza con 0(cero,zero,xrous,zetsfvddfffnfjbsfdchjvdptm)
Un IndexOutOfBoundException ocurre cuando utilizas un indice incorrecto(como negativo o mayor o igual que el numero de elementos que contiene)
Los arreglos tienen una variable lenght que nos dice el numero de elemento que tiene el arreglo.
El ultimo index qque puedes accesar es uno menos que el valor del arreglo.
Arreglos multidimencionales son simplemente arreglos de arreglos.
Las dimenciones en un arreglo multidimencional pueden tener diferentes tamaños.
Un arreglo de primitivos puede aceptar cualquier valor que pueda ser automaticamente promovido al tipo de dato del arreglo.
Un arreglo de objetos puede acepara cualquier valor que pase la prueba IS-A con respecto a el tipo de daro del objeto.
Si asignas un arreglo a otro, ambos arreglos deben de tener las mismas dimensiones para que la asignacion sea exitosa.
Puedes asignar un arreglo a otro que sea un un supertipo del arreglo que estas asignando(por ejemplo puedes asignar un Honda[] a un Car[])
martes, 9 de diciembre de 2008
Pasar variables a metodos...
Los metodos pueden usar valores primitivos o referencia a objetos como argumentos.
Los argumentos de los metodos siempre son copias.
Los argumentos de los metodos nunca son Objetos, son referencias a objetos.
Un argumento primitivo es una copia del argumento original.
Un argumento de referencia es una copia de la referencia de otra variable de referencia.
Shadowing es cuando dos variable que estan en diferentes "scopes" tienen el mismo nombre, esto hace que la variable con el "scope" actual oculte al de scope mas amplio.
Los argumentos de los metodos siempre son copias.
Los argumentos de los metodos nunca son Objetos, son referencias a objetos.
Un argumento primitivo es una copia del argumento original.
Un argumento de referencia es una copia de la referencia de otra variable de referencia.
Shadowing es cuando dos variable que estan en diferentes "scopes" tienen el mismo nombre, esto hace que la variable con el "scope" actual oculte al de scope mas amplio.
Usar una variable o un elemento de un Arreglo que no ha sido inicializada ni asignada
Cuando un arreglo de objetos es instanciado, los elementos del arreglo no son creados automaticamente, sin embargo todas la referencias obtienen el valor de null.
Cuando un arreglo de primitivos es instanciado de llena con los valores de default.
LAs variables de instancia son siempre inicializadas con sus valores de default.
LAs variables locales, tambien llamadas automaticas o de metodos nunca se inicializan con sus valores de default, por lo tanto si tratamos de usar una que no este inicializada nos manda un error el compilador.
Cuando un arreglo de primitivos es instanciado de llena con los valores de default.
LAs variables de instancia son siempre inicializadas con sus valores de default.
LAs variables locales, tambien llamadas automaticas o de metodos nunca se inicializan con sus valores de default, por lo tanto si tratamos de usar una que no este inicializada nos manda un error el compilador.
Asignaciones Basicas.
Las literales enteros son implicitamente int.
Las expresiones con integer siempre regresan resultados de tamaño int, nunca menores.
Los puntos flotantes son explicitamente doubles.
Guardar un primitivo en un tipo de dato mas pequeño, siempre resulta en que se truncan los bits.
Las asignaciones compuestas(ej: +=) siempre resultan en un casting automatico.
Una variable de referencia guarda los bits que son usados para referir al objeto.
Las variables de referencia pueden referir a subclases del tipo de objeto que esta guardando pero nunca a superclases.
Cuando creas un nuevo objeto pasan 3 cosas(Ejemplo Button b = new Button() ).
Crea una variable de referencia llamada b, de tipo Button.
Crear un buvo objeto Button
Asignar la referencia b al recien creado objeto de tipo Button
Las expresiones con integer siempre regresan resultados de tamaño int, nunca menores.
Los puntos flotantes son explicitamente doubles.
Guardar un primitivo en un tipo de dato mas pequeño, siempre resulta en que se truncan los bits.
Las asignaciones compuestas(ej: +=) siempre resultan en un casting automatico.
Una variable de referencia guarda los bits que son usados para referir al objeto.
Las variables de referencia pueden referir a subclases del tipo de objeto que esta guardando pero nunca a superclases.
Cuando creas un nuevo objeto pasan 3 cosas(Ejemplo Button b = new Button() ).
Scope
El scope(alcanze), se refiere al tiempo de vida de las variables.
Ecisten basicamente 4 tipos de Scope
Las variables estaticas que viven tanto como vivan las clases
Las variables de instancia que viven el tiempo que sus objetos viven
Las variables locales viven el tiempo que su metodo este en el stack, aunquee si su metodo invoca a otro metodo, estas variable no estaran disponibles temporalmente
Las variables de bloque, existen el tiempo que su bloque tarde en terminarse
Ecisten basicamente 4 tipos de Scope
Casting Literal y Primitivo
Las literales de tipo Integer pueden ser octal (ej:019) o Exadecimal (ej 0X3A7)
Las literales para ong terminan en L o l.
Las literales float Terminan en F o f y las double terminan en D o d.
LAs literales para Boolean son "true" o "false"
Las literles para char deben de estar entre comilla simples (ej: 'c')
Las literales para ong terminan en L o l.
Las literales float Terminan en F o f y las double terminan en D o d.
LAs literales para Boolean son "true" o "false"
Las literles para char deben de estar entre comilla simples (ej: 'c')
Stack y Heap
Las variables locales viven en el Stack.
Los objetos y sus variables de instancia viven en el Heap.
Los objetos y sus variables de instancia viven en el Heap.
Notas Mentales(no es parte de el orden original)
xxxValue() //Regresa un primitivo de un objeto "wrapeado"
parseXxx(String st) //Regresa un primitivo de un objeto "wrapeado"
valueOf(String st) //Regresa un objeto de un dato primitivo.
El compilador escoge hacer un Widening antes de hacer unBoxing.
Una de las reglas mas importantes es que las cosas que ya existian(como en widening), sobre las nuevas caracteristicas de java 5(como el Boxing o el Var-args...)
Ninguna de las clases wrapeadas puede hacer el boxing, por que un Short is NOT a Integer.
Boxing --THEN----> Widening Esta BIEN.
Widdening --THEN-> Boxing Esta MAL
Un objeto es eligible para que lo mande a chingar a su madre el garbage collector cuando ningun hilo(Thread) vivo, puede accesar a el..
parseXxx(String st) //Regresa un primitivo de un objeto "wrapeado"
valueOf(String st) //Regresa un objeto de un dato primitivo.
El compilador escoge hacer un Widening antes de hacer unBoxing.
Una de las reglas mas importantes es que las cosas que ya existian(como en widening), sobre las nuevas caracteristicas de java 5(como el Boxing o el Var-args...)
Ninguna de las clases wrapeadas puede hacer el boxing, por que un Short is NOT a Integer.
Boxing --THEN----> Widening Esta BIEN.
Widdening --THEN-> Boxing Esta MAL
Un objeto es eligible para que lo mande a chingar a su madre el garbage collector cuando ningun hilo(Thread) vivo, puede accesar a el..
martes, 25 de noviembre de 2008
Acoplamiento y Cohecion.
Acoplamiento se refiere a el grado en que una clase conoce datos acerca de los miembros de otra clase.
Un bajo acomplamieto es deseable, puesto que las otras clases solo deben de saber cosas que realmente le interezan y los datos deben estar encapsulados.
Cohesion se refiere al hecho de que las clases haces una funcion especifica.
El hecho de que las clases hagan una sola y simple funcion aumenta la mantenibilidad del codigo.
Un bajo acomplamieto es deseable, puesto que las otras clases solo deben de saber cosas que realmente le interezan y los datos deben estar encapsulados.
Cohesion se refiere al hecho de que las clases haces una funcion especifica.
El hecho de que las clases hagan una sola y simple funcion aumenta la mantenibilidad del codigo.
Static
Los metodos estaticos(Static) se usan cuando queremos hacer cosas que no afectan el funcionamiento de ninguna instancia en especifico.
Las clases estaticas se usan para guardar valores que pertenecen a la clase, no a una instancia en especifico.
Todos los metodos estaticos pertenecen a las clases, no a las isntancias.
Un metodo estatico no puede acceder a una variable de instancia directamente.
Se puede acceder a una miembro estatico utilizando el nombre de la clase( Class.Metodo()), pero recuerda que acceder a una variale de estatica utilizando una instancia es una trampa, en realidad la variable sigue sin pertenecer a la instancia sino a la clase.
Los metodos estaticos no pueden ser sobreescritos, pero pueden ser redefinidos.
Las clases estaticas se usan para guardar valores que pertenecen a la clase, no a una instancia en especifico.
Todos los metodos estaticos pertenecen a las clases, no a las isntancias.
Un metodo estatico no puede acceder a una variable de instancia directamente.
Se puede acceder a una miembro estatico utilizando el nombre de la clase( Class.Metodo()), pero recuerda que acceder a una variale de estatica utilizando una instancia es una trampa, en realidad la variable sigue sin pertenecer a la instancia sino a la clase.
Los metodos estaticos no pueden ser sobreescritos, pero pueden ser redefinidos.
Constructores e instansacion
Un costructor siempre es invocado cuando un objeto es creado.
Cada una de las superclases en un arbol de herencia tiene a un constructor llamado.
Todas las clases, incluso las clases abstractas tienen por lo meos un constructor.
Los constructores deben tener el mismo nombre de la clase.
Los constructores no tienen tipo alguno de retorno, si ves a un "cosntructor" con un tipo de retorno, no es un constructor es un metodo.
LA forma en que funcionan los contructores es la siguente:
-->Un cosntructor llama al costructor de su clase padre, este a su vez llama al costructor de su clase padre y asi sucesivamente.
-->El super super super (el ultimo padre) costructor se executa, luego continua el que lo halla llamado y asi sucesivamente.
Los constructores pueden usar cualquier modificador de acceso(incluso privado)
El compilador te crea un cosntructor por default si tu no creas ningun constructor explicitamente.
El constructor que se crea por default es un cosntructos sin argumentos, con una llamada a super();
La primera sentencia de un cosntructor debe de ser o this() (un constructor sobrecargado) o super().
Solo podemos acceder a los miembros de instancia luego de que el constructor se halla executado.
Las clases abstractas tienen constructores que son llamados cuando la primer subclase concreta los llama.
Las interfaces no tienen constructores.
Los constructores nunca son heredados, por los tanto no pueden ser sobreescritos.
Si una superclase no tiene un constructor sin argumentos entonces tenemos que poner un llamado a super() con argumentos a webos.
Un constructor solo puede ser llamado dentro de otro costructor usando las palabras this() o super().
Cosas que debemos hacer para llamar correctamente a this()
-->Deben aparecer solo en la primera sentencia del constructor.
-->La lista de argumentos nos dice cual constructor sobrecargado es llamado.
-->Constructores pueden llamar a constructores, que pueden llamar a cosntructores ya asi hasta que se te de la gana, pero al final alguno de ellos tiene que hacer un llamado al super() o el Universo Java como lo conocemos implocionaria(ok, solo se acaban los recursos de tu compu y se bloqueria(tal vez eso es peor :P))
-->llamados a this() y super() no pueden ir en el mismo constructor, puede poner cualquiera de los dos, pero no los dos al mismo tiempo.
-->
Cada una de las superclases en un arbol de herencia tiene a un constructor llamado.
Todas las clases, incluso las clases abstractas tienen por lo meos un constructor.
Los constructores deben tener el mismo nombre de la clase.
Los constructores no tienen tipo alguno de retorno, si ves a un "cosntructor" con un tipo de retorno, no es un constructor es un metodo.
LA forma en que funcionan los contructores es la siguente:
-->Un cosntructor llama al costructor de su clase padre, este a su vez llama al costructor de su clase padre y asi sucesivamente.
-->El super super super (el ultimo padre) costructor se executa, luego continua el que lo halla llamado y asi sucesivamente.
Los constructores pueden usar cualquier modificador de acceso(incluso privado)
El compilador te crea un cosntructor por default si tu no creas ningun constructor explicitamente.
El constructor que se crea por default es un cosntructos sin argumentos, con una llamada a super();
La primera sentencia de un cosntructor debe de ser o this() (un constructor sobrecargado) o super().
Solo podemos acceder a los miembros de instancia luego de que el constructor se halla executado.
Las clases abstractas tienen constructores que son llamados cuando la primer subclase concreta los llama.
Las interfaces no tienen constructores.
Los constructores nunca son heredados, por los tanto no pueden ser sobreescritos.
Si una superclase no tiene un constructor sin argumentos entonces tenemos que poner un llamado a super() con argumentos a webos.
Un constructor solo puede ser llamado dentro de otro costructor usando las palabras this() o super().
Cosas que debemos hacer para llamar correctamente a this()
-->Deben aparecer solo en la primera sentencia del constructor.
-->La lista de argumentos nos dice cual constructor sobrecargado es llamado.
-->Constructores pueden llamar a constructores, que pueden llamar a cosntructores ya asi hasta que se te de la gana, pero al final alguno de ellos tiene que hacer un llamado al super() o el Universo Java como lo conocemos implocionaria(ok, solo se acaban los recursos de tu compu y se bloqueria(tal vez eso es peor :P))
-->llamados a this() y super() no pueden ir en el mismo constructor, puede poner cualquiera de los dos, pero no los dos al mismo tiempo.
-->
martes, 18 de noviembre de 2008
Tipos de retorno
Los metodos sobrecargados pueden cambiar su tipo de retorno, los metodos sobreescritos no pueden exceptuando los retornos covariantes(Hijos del tipo de retorno original)
Los metodos que retornen un objeto, pueden retornar tambien null, si lo desean
Array es un tipo de retorno valido.
Para metodos con tipos de retorno primitivos, cualquier cosa que se pueda convertir implicitamente el tipo de retorno deseado es valido.
Nada puede ser rettornado en un tipo de retorno void, pero pueder regresar nada, es decir puesdes escribir return; sollito.
Los metodos que retornen una referencia a un objeto pueden retornar un subtipo.
Metodos que retoenen una interfaz, pueden retornar cualquier implementacion de esta.
Los metodos que retornen un objeto, pueden retornar tambien null, si lo desean
Array es un tipo de retorno valido.
Para metodos con tipos de retorno primitivos, cualquier cosa que se pueda convertir implicitamente el tipo de retorno deseado es valido.
Nada puede ser rettornado en un tipo de retorno void, pero pueder regresar nada, es decir puesdes escribir return; sollito.
Los metodos que retornen una referencia a un objeto pueden retornar un subtipo.
Metodos que retoenen una interfaz, pueden retornar cualquier implementacion de esta.
miércoles, 12 de noviembre de 2008
Implemento de interfaces
Implementar una interface.
Cuando implementas una interface, estas firmando un contrato.
Implementas una interface al sobreescribirla propia y correctamente en todos los metodos que son definidos por la interface.
Una sola clase puede implementar multiples interfaces
Cuando implementas una interface, estas firmando un contrato.
Implementas una interface al sobreescribirla propia y correctamente en todos los metodos que son definidos por la interface.
Una sola clase puede implementar multiples interfaces
Casting
Casting para variables de referencia
Hay dos tipos de casting para variable de referencia, el downcasting y el upCasting.
Downcating: Si se tiene una variable de reque refiera a un subtipo del objeto,puedes asignarlo a una variable de referencia del suptipo en especifico.Se debe de hacer un casting especifico para poder hacer esto y el resultado es que puede acceder al nuevo subtivo con la nueva ariable de referencia
Upcasting: Puedes asignar una variable de referencia a un supertipo de de otra variable de referencia ya sea de forma implicita o explicita. Esta es una operacion segura, por que la superclase contiene todas las cosas que tiene la subclase..
Hay dos tipos de casting para variable de referencia, el downcasting y el upCasting.
Downcating: Si se tiene una variable de reque refiera a un subtipo del objeto,puedes asignarlo a una variable de referencia del suptipo en especifico.Se debe de hacer un casting especifico para poder hacer esto y el resultado es que puede acceder al nuevo subtivo con la nueva ariable de referencia
Upcasting: Puedes asignar una variable de referencia a un supertipo de de otra variable de referencia ya sea de forma implicita o explicita. Esta es una operacion segura, por que la superclase contiene todas las cosas que tiene la subclase..
Metodos sobrecargados(Overloaded)
Un metodo sobrecargado significa que se va a reusar el nombre del metodo, pero con argumentos diferentes.
caracteristicas de los Metodos sobrecargados:
-->Deben de tener una lista de argumentos diferente.
-->Pueden tener diferentes tipos de retorno, si la lista de argumentos es tambien diferente.
-->Pueden tener diferentes modificadores de acceso.
-->Metodos de usa superclase pueden ser sobrecargados en una subclase.
El polimosfismo aplica a metodos sobreescritos, pero no a sobrecargados.
El tipo de referencia determina cual metodo sobre cargado va a ser llamado en tiempo de compilacion.
caracteristicas de los Metodos sobrecargados:
-->Deben de tener una lista de argumentos diferente.
-->Pueden tener diferentes tipos de retorno, si la lista de argumentos es tambien diferente.
-->Pueden tener diferentes modificadores de acceso.
-->Metodos de usa superclase pueden ser sobrecargados en una subclase.
El polimosfismo aplica a metodos sobreescritos, pero no a sobrecargados.
El tipo de referencia determina cual metodo sobre cargado va a ser llamado en tiempo de compilacion.
Metodos sobreescritos(Overriding)
Los metodos pueden ser sobreescritos o sobrecargados, los constructores pueden ser sobrecargados pero no sobreescritos.
Los metodos estaticos deben(obligatoriamente) ser sobreescritos por la primera clase concreta no abstracta.
Caracteristicas de los metodos sobreescritos:
-->Deben tener la misma lista de argumentos.
-->Deben tener el mismo tipo de retornos, excepto por que apartir de java 5 , el tipo de retorno puede ser una subclase,esto es conocido como retorno covariante.
-->No debe de tener un tipo de acceso mas restrictivo.
-->No bede de lanzar nuevas excepciones o excepcionnes que no sean las excepciones ya lansadas o sus sublcases.
-->Puede lanzar nuevas excepciones que sea subclases de las excepciones ya lanzadas o cualquier unchecked exception(excepciones en tiempo de ejecucion)
Los metodos finales no pueden ser sobreescritos.
Solo los metodos heredados pueden ser sobreescritos, y recuerda que los metodos privados no son sobreescritos.
una subclase una la sintaxis super.nombreDelMetodoSobreescrito() para llamar a la version de la superclase del metodo.
El tipo de objeto(no la variable de referencia), determina cual tipo de metodo sobreescrito es llamado en tiepo de ejecucion.
Los metodos estaticos deben(obligatoriamente) ser sobreescritos por la primera clase concreta no abstracta.
Caracteristicas de los metodos sobreescritos:
-->Deben tener la misma lista de argumentos.
-->Deben tener el mismo tipo de retornos, excepto por que apartir de java 5 , el tipo de retorno puede ser una subclase,esto es conocido como retorno covariante.
-->No debe de tener un tipo de acceso mas restrictivo.
-->No bede de lanzar nuevas excepciones o excepcionnes que no sean las excepciones ya lansadas o sus sublcases.
-->Puede lanzar nuevas excepciones que sea subclases de las excepciones ya lanzadas o cualquier unchecked exception(excepciones en tiempo de ejecucion)
Los metodos finales no pueden ser sobreescritos.
Solo los metodos heredados pueden ser sobreescritos, y recuerda que los metodos privados no son sobreescritos.
una subclase una la sintaxis super.nombreDelMetodoSobreescrito() para llamar a la version de la superclase del metodo.
El tipo de objeto(no la variable de referencia), determina cual tipo de metodo sobreescrito es llamado en tiepo de ejecucion.
Polimorfismo
Polimorfismo significa muchas formas.
Una refrencia a una variable, es siempre unica, nos se le puede cambiar el tipo, pero puede referir a un subtipo del objeto que declaro.
Un solo objeto puede ser referiado por muchas variables de referencia de muchos tipos diferente.. siempre y cuando sean del mismo tipo o supertipo del objeto.
La variable de referencia(no en objeto en si mismo), determina a que metodo se tiene que llamar.
En compilador solo sabe que variable de referencia se esta usando, pero al momento de que el objeto se ejecuta ya se sabe que objeto es.
LA invocacion polimorfica de los metodos aplica solo a metodos de instancia sobreescritos, no a variables estaticas ni a variables, solo a metodos que puedan llamarce a travez de una instancia.
Una refrencia a una variable, es siempre unica, nos se le puede cambiar el tipo, pero puede referir a un subtipo del objeto que declaro.
Un solo objeto puede ser referiado por muchas variables de referencia de muchos tipos diferente.. siempre y cuando sean del mismo tipo o supertipo del objeto.
La variable de referencia(no en objeto en si mismo), determina a que metodo se tiene que llamar.
En compilador solo sabe que variable de referencia se esta usando, pero al momento de que el objeto se ejecuta ya se sabe que objeto es.
LA invocacion polimorfica de los metodos aplica solo a metodos de instancia sobreescritos, no a variables estaticas ni a variables, solo a metodos que puedan llamarce a travez de una instancia.
Herencia
Las herencia permite a una clase ser una subcalse de una superclase, y por lo tanto heredar las variables public y protected y los metodos de la superclase
Herencia es el concepto principal para entender IS-A, polimorfismo, sobreescritura, sobrecargado, y casting.
Herencia es el concepto principal para entender IS-A, polimorfismo, sobreescritura, sobrecargado, y casting.
Encapsulacion IS-A HAS-A
LA encapsulacion ayuda a esconder la implementacion detras de una interface
El codigo encapsulado tiene dos caracteristicas:
Las variables de instancia se mantienen protegidas
Los metodos getter y setter proveen acceso a las variables de instancia.
IS-A se refuere a herencia o iplementacion
IS-A se expresa con la palabra reservada extends.
IS-A "hereda de" y "es un subtipo de" significan lo mismo.
HAS-A significa que una instancia de una clase "tiene una(HAS-A)" referencia a una instancia de otra clase u otra instancia de la misma clase.
El codigo encapsulado tiene dos caracteristicas:
Las variables de instancia se mantienen protegidas
Los metodos getter y setter proveen acceso a las variables de instancia.
IS-A se refuere a herencia o iplementacion
IS-A se expresa con la palabra reservada extends.
IS-A "hereda de" y "es un subtipo de" significan lo mismo.
HAS-A significa que una instancia de una clase "tiene una(HAS-A)" referencia a una instancia de otra clase u otra instancia de la misma clase.
domingo, 2 de noviembre de 2008
Enumeradores(enums)
--> enum Numeros{UNO,DOS,TRES} o
--> enum Numeros{UNO,DOS,TRES}
Variables y metodos estaticos
Declaracion de arreglos
Declaracion de variables
-->Tener cualquier tipo de control de acceso
-->Ser transient , final o volatile
-->No pueden ser reinicializadas una ves que se les asigna un valor
-->No pueden referir a otro objeto una ves que han sido asignadas a un objeto
-->Las variables de referencia fginal deben de ser inicializadas antes de que el contructor se complete
Metodos con var-args
Otros modificadores para miembros
-->El metodo no esta marcado como abstracto
-->El metodo tiene llaves "{}"
-->El metodo tiene codigo entre las llaves
-->Los metodos abstractos no pueden ser private
-->los metodos abstractos no pueden ser final
Variable Locales
Modificadores de acceso de miembros
-->Codigo en una clase puede aceder por medio de una instancia al codigo de otra clase.
-->El codigo de una clase puede acceder al codigo de otra mediante herencia
-->Los miembros default solo pueden ser accedidos por clases del mismo paquete
-->Los miembros protected pueden ser accedidos por clases del mismo paquete y por medio de herencia por miembros de otras clases no importando en que paquete esten
-->protected = paquete + hijos (subclases)
-->Fuera del paquete un miembro protected SOLO puede ser accedido por medio de herencia y una ves que se eredan los miembros se vuelven privados para todas las demas clases
-->
Implementacion de interfaces.
-->Provee una implementacion concreta para los metodos de la interface
-->Debe de seguir todas las reglas para osbreescribir los metodos que implementa
-->No debe de declarar ninguna otra "Checked exception" de un metodo implementado
-->Puede declarar Runtime Exception(Errores en tiempo de ejecucion.
-->Mantener la misma sintaxis, incluyendo argumentos y tipos de retorno.
Otros modificadores de clases .
-->final
-->strictfp
-->abstract
Modificadores de acceso de clases
-->public
-->private
-->protected
Existen 4 tipos de niveles de acceso
-->public
-->private
-->protected
-->default
las clases solo pueden tener acceso publico o default
-->Crear una instancia de otra clase
-->Extender (ser una subclase) seotra clase
-->Acceder a los metodos y variables de la otra clase
Reglas de declaracion.
Identificadores
viernes, 3 de octubre de 2008
Miembros de las clases(Metodos y variables de instancia)
Accesos default y protected
El acceso default y protected sólo se diferencian cuando hablamos de subclases, hay qué pensar en el aceso default como un acceso a nivel de paquetes es decir cuando intantamos accesar a un miembro qué es protected sólo podemos hacerlo si estadentro del mismo paquete a(y lo unstanciamos. Correctamente) si intantamos entrar desde una clase fuera del paquete nos va a mandar un error de compilación dicendonos que el miembro no existe
Por que de hecho no es siquera visible fuera del paquete, cuando intentamos acceder fuera de este nos manda una espantosa X.
Ahora cuando hablamos de protected las reglas del juego cambian como en el big brother com protected si podemos acceder fuera del paquete pero solo por medio de herencia es decir solo los hijos de la clase pueden acceder pero no por medio de una instancia sino llamando al método directamente o lo que es lo mismo usado el operador this, si queremos instanciarlo nos va a mandar far... Far away
VARIABLES LOCALES
No esxiste ningún modificador de acceso que pueda usarse con las variables locales, el único modificador que permiten las variables locales es el final.
OTROS MODIFICADORES PARA MIEMBROS
Existen varios modificadores para miembros como son final abstract strictfp volatile transient sinchronized static y native primrero veremos laos que se aplican a loa métodos
METODOS FINAL
Los métodos final no pueden ser sobreeacritos, bistros podemos usarlos pero si tratamos de sobreescribirlos nos manda un error de xompilacion esto se hace cuando queremos asegurarnis que nadiie pueda cmbiar el comportamiento de nuestros metodos
ARGUMENTOS FINAL
UN argumento es prácticamente lo mismo que una variable local, cuando declaramos un argumeto como final nos aseguramos de que los valores que les pasemos a esos mtods no pueden ser cambiados.(o el objeto al que refiere en u caso)
MÉTODOS ABSTRACTOS
Un metodo abstract termina con punto y coma y no puede se definido en la clase en las que es declarada, ose no ponemos una implementación del método sólo ponemos los modificadores de acceso el nombre del método y los argumentos , pero nunca lo implementamos,.
Un metodo abstracto debe de estar dentro de una clase abstracta, sin embargo piedra esxistir métodos comcretos dentro de una clase abstracta, va de nuevo , si un simple método es declarado abstracto la clase estera deber de ser abstracta, si no nos manda un error de compilación , sin embargo pueden existir clases abstractas con sólo métodos concretos.
La primera clase concreta que extienda a una clase abstracta debe implementar los métodos abstractos de está y de todas sus superclases.
El modificador abstract no lo podemos mezclar con final ni private, simplemete por que no tendríamos forma de implementarla, tampoco puede ser static.
SYNCRONIZED
un método sincronizado sólo puede accederse por un hilo a la vez, al acceso sinchronized sólo aplica a métodos y nada más.
El acceso default y protected sólo se diferencian cuando hablamos de subclases, hay qué pensar en el aceso default como un acceso a nivel de paquetes es decir cuando intantamos accesar a un miembro qué es protected sólo podemos hacerlo si estadentro del mismo paquete a(y lo unstanciamos. Correctamente) si intantamos entrar desde una clase fuera del paquete nos va a mandar un error de compilación dicendonos que el miembro no existe
Por que de hecho no es siquera visible fuera del paquete, cuando intentamos acceder fuera de este nos manda una espantosa X.
Ahora cuando hablamos de protected las reglas del juego cambian como en el big brother com protected si podemos acceder fuera del paquete pero solo por medio de herencia es decir solo los hijos de la clase pueden acceder pero no por medio de una instancia sino llamando al método directamente o lo que es lo mismo usado el operador this, si queremos instanciarlo nos va a mandar far... Far away
VARIABLES LOCALES
No esxiste ningún modificador de acceso que pueda usarse con las variables locales, el único modificador que permiten las variables locales es el final.
OTROS MODIFICADORES PARA MIEMBROS
Existen varios modificadores para miembros como son final abstract strictfp volatile transient sinchronized static y native primrero veremos laos que se aplican a loa métodos
METODOS FINAL
Los métodos final no pueden ser sobreeacritos, bistros podemos usarlos pero si tratamos de sobreescribirlos nos manda un error de xompilacion esto se hace cuando queremos asegurarnis que nadiie pueda cmbiar el comportamiento de nuestros metodos
ARGUMENTOS FINAL
UN argumento es prácticamente lo mismo que una variable local, cuando declaramos un argumeto como final nos aseguramos de que los valores que les pasemos a esos mtods no pueden ser cambiados.(o el objeto al que refiere en u caso)
MÉTODOS ABSTRACTOS
Un metodo abstract termina con punto y coma y no puede se definido en la clase en las que es declarada, ose no ponemos una implementación del método sólo ponemos los modificadores de acceso el nombre del método y los argumentos , pero nunca lo implementamos,.
Un metodo abstracto debe de estar dentro de una clase abstracta, sin embargo piedra esxistir métodos comcretos dentro de una clase abstracta, va de nuevo , si un simple método es declarado abstracto la clase estera deber de ser abstracta, si no nos manda un error de compilación , sin embargo pueden existir clases abstractas con sólo métodos concretos.
La primera clase concreta que extienda a una clase abstracta debe implementar los métodos abstractos de está y de todas sus superclases.
El modificador abstract no lo podemos mezclar con final ni private, simplemete por que no tendríamos forma de implementarla, tampoco puede ser static.
SYNCRONIZED
un método sincronizado sólo puede accederse por un hilo a la vez, al acceso sinchronized sólo aplica a métodos y nada más.
Clases
Existen dos modificadores para las clases public y default sólo puede haber una clase pública por cada archivo de código y debe tener el mismo nombre que el archivo puede haber las clases privadas que sean, y si no existe una clase pública el archivo puede tener cualquier orden
Otros modificadores aparte de public y default una clase puede tener otros 3 tipos de modificadores estos son final,abstract y strictfp
Los modificadores strictfp y abstract se pueden usar juntos pero nunca podemos usar final y abstract
El modificador strictfp sólo se puede usar con clases y metodos pero nunca con variables
FINAL
Una clase que es final no puede ser una subclase es decir ninguna otra clase la puede extender
ABSTRACT
Una clase abstracta no puede ser instanciada, su único propósito en l vida es ser extendida, es decir no podemos crear un objeti con está clase pero podemos utilizarla para crear otras clases que si pueden ser instanciadas, una clase abstracta no termina con llaves ,termina con punto y coma , no se puede marcar una clase abstracta y final por qué tienen significados opuestos
INTERFACES
Las interfaces son como cases 100% abstractas, es decir en ellas solo se pueden declarar metodos abtractos , las interfaces son abstractas le pongamos ese modificador o no, las interfaces pueden ser públicas o default , pero los metodos dedntro de las interfaces son implictsmente public y abstract , las interfaces no pueden ser static y al ser abstractas tampoco pueden ser final las interfaces no pueden extender ni implementar ninguna clase , pero tampoco pueden implmentar interfaces, sólo extienden interfaces, y puede estender las interfaces que quiera, ninguna, una o varias
Las variables de las interfaces son implícitamente public, static y final lo escribamos así o no.
MIEMBROS DE LA CLASE
Los métodos y las variables de instancia son llamados miembros, los miembros pueden tomar todos los modificadores de acceso el public, private, default y protected
Existen dos firmas de acceder a un método de un clase, el primero es usado el operador "." esto es instanciando la clase y utilizar el operador punto para accesar a un método o a alguna variable local.
La segunda forma es por medio de la herencia, cuando extendéis otra clase estamos tomando todos sus métodos y variables de instancia y estamos haciendolos nuestros, por eso no ncesiramos nada para usarlos, simplemente los llamamos con su nombre.
PUBLIC
Cuando un miembro es public, puede ser accesado desde cualquier lado siempre y cuando clase pueda ser accesada, es decir si podemos ver l clase podemos ver cualquier método público, cuando extendemos una clase. Toda los miembros públicos son heredados sin importar el paquete en que se encuentren
PRIVATE
Un miembro privado no puede ser visto en ningún lugar fuera de la clase en donde es declarado, ni siquiera por herencia , es decir su una clase es privada unicamente puede ser vista por la mismo clase, si tratamos de accesarlo desde otra clase nos manda un error de compilación, podemos declarar otro metido con el mismo nombre en una subclase, pero no estamos sobrescribiendo nada, sólo es otro método.
.
Otros modificadores aparte de public y default una clase puede tener otros 3 tipos de modificadores estos son final,abstract y strictfp
Los modificadores strictfp y abstract se pueden usar juntos pero nunca podemos usar final y abstract
El modificador strictfp sólo se puede usar con clases y metodos pero nunca con variables
FINAL
Una clase que es final no puede ser una subclase es decir ninguna otra clase la puede extender
ABSTRACT
Una clase abstracta no puede ser instanciada, su único propósito en l vida es ser extendida, es decir no podemos crear un objeti con está clase pero podemos utilizarla para crear otras clases que si pueden ser instanciadas, una clase abstracta no termina con llaves ,termina con punto y coma , no se puede marcar una clase abstracta y final por qué tienen significados opuestos
INTERFACES
Las interfaces son como cases 100% abstractas, es decir en ellas solo se pueden declarar metodos abtractos , las interfaces son abstractas le pongamos ese modificador o no, las interfaces pueden ser públicas o default , pero los metodos dedntro de las interfaces son implictsmente public y abstract , las interfaces no pueden ser static y al ser abstractas tampoco pueden ser final las interfaces no pueden extender ni implementar ninguna clase , pero tampoco pueden implmentar interfaces, sólo extienden interfaces, y puede estender las interfaces que quiera, ninguna, una o varias
Las variables de las interfaces son implícitamente public, static y final lo escribamos así o no.
MIEMBROS DE LA CLASE
Los métodos y las variables de instancia son llamados miembros, los miembros pueden tomar todos los modificadores de acceso el public, private, default y protected
Existen dos firmas de acceder a un método de un clase, el primero es usado el operador "." esto es instanciando la clase y utilizar el operador punto para accesar a un método o a alguna variable local.
La segunda forma es por medio de la herencia, cuando extendéis otra clase estamos tomando todos sus métodos y variables de instancia y estamos haciendolos nuestros, por eso no ncesiramos nada para usarlos, simplemente los llamamos con su nombre.
PUBLIC
Cuando un miembro es public, puede ser accesado desde cualquier lado siempre y cuando clase pueda ser accesada, es decir si podemos ver l clase podemos ver cualquier método público, cuando extendemos una clase. Toda los miembros públicos son heredados sin importar el paquete en que se encuentren
PRIVATE
Un miembro privado no puede ser visto en ningún lugar fuera de la clase en donde es declarado, ni siquiera por herencia , es decir su una clase es privada unicamente puede ser vista por la mismo clase, si tratamos de accesarlo desde otra clase nos manda un error de compilación, podemos declarar otro metido con el mismo nombre en una subclase, pero no estamos sobrescribiendo nada, sólo es otro método.
.
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
-->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
java.lang.Runable
Propiedades del main()
Reglas de declaración
Variables y metodos estaticos(static)
Otros modificadores de acceso para miembros
-->El metodo no esta marcado como abstracto
-->El metodo tiene llaves "{}"
-->El metodo tiene codigo entre las llaves
-->Los metodos abstractos no pueden ser private
-->Los metodos abstractos no pueden ser final
-->tener cualquier modificador de control
-->Ser marcdas como final o transient
-->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.
Variables Locales
Modificadores de acceso de miembros
-->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"
-->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.
otros Modificadores de clases.
Clase y modificadores de acceso
-->Crear una instancia de la otra clase
-->Extender la otra clase
-->Acceder a los metodos y las variables de la otra clase
Suscribirse a:
Entradas (Atom)