Está en la página 1de 18

Java World Captulo 1

Agradecimientos
Quisiera darle las gracias a Matias Emiliano Alvarez Durn (quien ahora ser coautor de JavaWorld) por su aporte, y por darme ese empujn que tanta falta me haca. Sin tu ayuda JavaWorld no hubiera visto nunca la luz. Gracias

h t t p : / / g u s t a v o a l b e r o l a . b l o g s p o t . c o m

Java World Captulo 1

h t t p : / / v a l o r c r e a t i v o . b l o g s p o t . c o m

Paradigmas de programacin
Para aquellos que son iniciados en el tema de la programacin, es bueno tener en cuenta un poco la evolucin en temas de cmo se programa. Desde siempre la programacin fue una serie de algoritmos que resuelven un problema, lo que cambi, fue la manera de agrupar y asociar estos algoritmos.

Paradigma estructural
Este paradigma busca como objetivo dividir un problema complejo (sistema), en varios problemas menos complejos (funciones). Este es un paradigma que ha ido quedando en desuso con el correr de los tiempos, aunque aquellos que estn dando sus primeros pasos en alguna institucin, puede que lo vean en lenguajes como Pascal o C++.

Paradigma orientado a objetos


En este paradigma, cada elemento del sistema se divide en objetos. Estos son representaciones de entidades que encontramos en la vida real. Por ejemplo, si estuviramos diseando un sistema para un aeropuerto, sera ms que factible encontrarse con las clases Aeroplano, Pasajero, Capitan. Pero, y la diferencia? En este paradigma, cada entidad es responsable de realizar las acciones que le conciernen, y solo las que le conciernen. Supongamos que estamos diseando un juego, y tenemos un avin, segn los paradigmas hubiramos hecho lo siguiente: Estrucura procedural en lenguaje C typedef struct Avion { int cantidadPasajerosSoportada; float peso; //... otras propiedades de un avion } Avion_1; public void volar(avion av) { //... codigo } public void aterrizar(avion av) { //...codigo } public main() { volar(Avion_1) aterrizar(Avion_1) }

Java World Captulo 1 Estructura orientada a objetos en Java class Avion { int cantidadPasajerosSoportada; float peso; //... otras propiedades de un avin public void volar() { //... Codigo } public void aterrizar() { //... Codigo } } static public void main(String[] args) { Avion avion_01 = new Avion(); avion_01.volar(); avion_01.aterrizar(); } La diferencia ms grande la podemos apreciar al momento de llamar a las acciones de volar y aterrizar. En el modelo estructural se llama a una funcin a la cal se le pasa un avin como argumento, pero en el modelo orientado a objetos, se le dice al propio avin que vuele o aterrice.

h t t p : / / g u s t a v o a l b e r o l a . b l o g s p o t . c o m

Java World Captulo 1

Definicin de una clase h t t p : / / v a l o r c r e a t i v o . b l o g s p o t . c o m


public class Persona { //Atributos String nombre; String apellido; int edad; float peso; //Constructores public Persona(String nombre, String apellido) { //Cdigo ... } //Mtodos public void correr(){ //Cdigo... } public void caminar(){ //Cdigo... } public void hablar(){ //Cdigo... } } Bsicamente, una clase contiene estos elementos: Atributos Mtodos Constructores Definen el estado de un objeto Definen el comportamiento (pueden ser de clase o de objeto) Permiten crear objetos

Existen otros elementos que pertenecen a la clase, y no al objeto. Estos contienen el identificador static. Pero no te preocupes, ya los veremos.

Diferencia entre clase y objeto


Una clase representa una especie de molde para cada objeto. Cuando nosotros creamos un objeto, lo hacemos utilizando alguna clase en particular, esto quiere decir que el objeto creado, puede realizar el comportamiento de la clase, y contiene todos sus atributos. Vamos a verlo con un ejemplo ms grfico. Utilicemos la clase Persona que definimos anteriormente. Basandonos en ella, podemos apreciar que cada Persona (clase), tendr ciertas caractersticas (atributos). Por ejemplo, supongamos una persona llamada Gabriel y otra Laura.

Java World Captulo 1

Clase

Objetos Gabriel Gabriel Persona Nombre Apellido Edad Laura Peso Laura Momomo 38 65.2 Rarara 15 56.3

Al definir un objeto de tipo Persona estamos diciendole a la JVM que cree una estructura con tales propiedades y tal comportamiento. En el ejemplo anterior, Laura y Gabriel tambin tienen la capacidad de correr(), caminar(), y hablar().

Para todos aquellos que crean necesario y/o quieran profundizar en la programacin orientada a objetos les quisiera recomendar la siguiente bibliografa: Head First Java Es muy amigable, y contiene una manera de explicar todo con texto e imgenes (permite mayor absorcin de los conocimientos). La desventaja es que solo se encuentra en ingls. Thinking in Java Es muy extenso y detallado, y hay una versin en castellano. La desventaja es que en algunos momentos, puede llegar a ser un tanto abrumador. Busquen en internet programacion + objetos + java. Este es un tema ms que abarcado en la web, y encontrarn mucha informacin al respecto.

h t t p : / / g u s t a v o a l b e r o l a . b l o g s p o t . c o m

Java World Captulo 1

Ms conceptos de la POO h t t p : / / v a l o r c r e a t i v o . b l o g s p o t . c o m
Al adentrarnos en este nuevo paradigma, no solamente cambia la manera de codificar, sino que se introducen varios conceptos que forman las bases de este, tales como encapsulamiento, polimorfismo y herencia.

Encapsulamiento
Algunos de los beneficios aportados por el paradigma de orientacin a objetos (OO) son: flexibilidad y mantenimiento. Pero para lograr esto, es necesario escribir las clases de una manera en particular. La clave para lograr esto es encapsular la lgica y el estado de la clase para que no pueda ser accedido de forma directa, y dejar de manera publica un set de mtodos para poder interactuar con la clase. Las claves son: Siempre mantener las variables de instancia protegidas (con un modificador de acceso, generalmente public) Crea mtodos pblicos (public) para acceder a las variables de instancia Para los anteriores, utiliza la convencin de nombres de JavaBeans

Herencia
Cuando utilizamos la herencia, a veces es necesario saber si un objeto pertenece a una clase en concreto. Para realizar esto utilizamos el operador instanceof, este devuelve un boolean, siendo true en caso de que pertenezca a dicha clase, falso en caso contrario. objeto instanceof clase Es posible crear relaciones de herencia en Java extendiendo una clase. Las dos caractersticas ms comunes para utilizar la herencia son: Para promover la reutilizacin del cdigo Para el uso del polimorfismo El polimorfismo nos permite tratar una subclase como si fuera una clase del tipo de su superclase. La contrapartida de esto es que solo se podrn llamar a los atributos que se encuentren disponibles para el tipo de clase declarada.

Is-A
Para el examen es necesario saber: Is-A indica que la clase X es del tipo Y. Esto se logra a travs de extends o implements. Al termino Is-A tambin se lo puede llamar: derived, subclass, inherits, o subtype. A la superclase tambin se la conoce como supeclase

Has-A
Indica que una clase A tiene una variable de instancia que contiene una referencia a B.

Polimorfismo
Un objeto es polimrfico cuando cumple con al menos una condicios Is-A. Esto es cierto para todas las clases que no sean de tipo Object, ya que todas heredan de esta. La nica manera de acceder a un objeto es a travs de una variable de referencia. Algunas pautas para recordar de estas: Una variable de referencia puede ser de un solo tipo, y una vez que fue declarada, ese tipo jams puede modificarse. Una referencia es una variable, de manera que puede ser reasignada a otros objetos (a menos que se declare como final).

Java World Captulo 1 Un tipo de variable de referencia determina los mtodos que pueden ser invocados sobre el objeto que la variable referencia. Una variable de referencia puede tomar como referencia cualquier objeto del mismo tipo, o un subtipo del mismo. Una variable de referencia puede tener como tipo el de una interface. Si es declarada de esta manera, podr contener cualquier clase que implemente la interfaz. El concepto es que solo los mtodos de instancia son invocados dinmicamente. Esto es logrado por la JVM, la cual siempre tiene conocimiento de que tipo de objeto es el que se est tratando, as como su rbol de herencia.

Sobre escritura
Cada vez que una clase hereda un mtodo de su superclase, existe la posibilidad de sobrescribir el mtodo (a menos que este haya sido declarado con el modificador de no acceso final). El beneficio de la sobre escritura es la habilidad de definir comportamiento particular para una clase especfica. Caractersticas necesarias para hacer uso de la sobre escritura: La lista de argumentos debe ser exactamente igual que el mtodo a sobrecargar. El valor de retorno debe ser del mismo tipo, o un subtipo. El modificador de acceso no puede ser ms restrictivo que el del mtodo a sobre escribir. El modificador de acceso puede ser menos restrictivo que el mtodo a sobre escribir. Los mtodos de instancia solo pueden ser sobre escritos si es que son heredados por la subclase. El mtodo sobre escrito puede lanzar cualquier excepcin sin verificacin en tiempo de ejecucin, sin importar de las excepciones que hayan sido declaradas en el mtodo de la superclase. El mtodo no deber lanzar excepciones verificadas que son nuevas o amplan a las ya definidas por el mtodo a sobre escribir. El mtodo sobre escrito puede lanzar una cantidad menor de excepciones que las definidas en el mtodo a sobre escribir. No puedes sobre escribir un mtodo que haya sido declarado como final (creo que es la 20 vez que repetimos esto, pero, nunca es suficiente). No es posible sobre escribir un mtodo que haya sido declarado como static. Si un mtodo no puede ser heredado, no puede ser sobre escrito.

Invocando la versin de la superclase de un mtodo sobre escrito


Tambin es posible valerse del cdigo definido en la superclase. La manera de invocarlo es con la palabra super (esta hace referencia a la superclase). En el caso de que un mtodo sobre escrito no declare alguna excepcin del mtodo a sobre escribir, si se utiliza como referencia el tipo de la superclase, se espera que pueda llegar a generarse la excepcin.

h t t p : / / g u s t a v o a l b e r o l a . b l o g s p o t . c o m

Java World Captulo 1

h t t p : / / v a l o r c r e a t i v o . b l o g s p o t . c o m

public class Generic { public void doSomething() throws Exception { // . . . some code here } } public class Specific extends Generic { public void doSomething() { // . . . some code here } } public class Program { static public void main ( String[] args ) { Generic obj1 = new Specific(); Specific obj2 = new Specific(); obj2.doSomething(); obj1.doSomething(); //Se genera un error de compilacin, dado que no se declaro como recibir la excepcin Exception //El cdigo podra solucionarse con un try-catch try { obj1.doSomething(); } catch ( Exception ex ) { //. . . some code here } } }

Sobrecarga
La sobrecarga de mtodos permite utilizar el mismo nombre de un mtodo, el cual toma una cantidad y/o tipo de parmetros diferentes. Las reglas para la sobrecarga son: Deben de modificarse la lista de parmetros. Pueden modificar el tipo de valor de retorno. Pueden cambiar el modificador de acceso. Pueden declarar excepciones nuevas o ms abarcativas. Pueden ser sobrecargados en la misma clase, o en una subclase. Bsicamente, un mtodo sobrecargado no es ms que un mtodo completamente diferente, pero que utiliza un nombre que ya existe.

Invocacin de mtodos sobrecargados


Para invocar un mtodo sobrecargado, es necesario especificar los parmetros del tipo esperado segn el mtodo que queramos invocar.

Java World Captulo 1 public class Something { public void doSomething(int val) { //. . . some code here } public void doSomething(float val) { //. . . some code here } static public void main (String[] args){ Something s1 = new Something(); int valor1 = 1; float valor2 = 2.3; s1.doSomething(valor1); //Se invoca al mtodo doSomething(int val) s1.doSomething(valor2); //Se invoca al mtodo doSomething(float val) s1.doSomething(new Object); //Error de compilacin. No existe ningn mtodo que reciba como parmetro un tipo Object } } En el caso de la invocacin con objetos, se vuelve un poco ms complicado. public class Generic {} public class Specific extends Generic {} public class Program { public void doSomething(Generic obj) { //. . . some code here } public void doSomething(Specific obj) { //. . . some code here } static public void main (String[] args) { Generic obj1 = new Generic(); Specific obj2 = new Specific(); Generic obj3 = new Specific(); Program p = new Program(); p.doSomething(obj1); //Se invoca al mtodo doSomething(Generic obj) p.doSomething(obj2); //Se invoca al mtodo doSomething(Specific obj) p.doSomething(obj3); //Se invoca al mtodo doSomething(Generic obj) } } En el ltimo caso, por ms que obj3 sea de tipo Specific, la referencia contiene un tipo Generic, y es esta la que determina a que mtodo se invoca.

10

h t t p : / / g u s t a v o a l b e r o l a . b l o g s p o t . c o m

11

Java World Captulo 1

Polimorfismo en sobre escritura y sobrecarga h t t p : / / v a l o r c r e a t i v o . b l o g s p o t . c o m


El polimorfismo no determina que mtodo invocar cuando se trata de sobrecarga, pero si cuando se trata de sobre escritura. Tabla de diferenciacin entre sobrecarga y sobre escritura: Sobrecarga de mtodo Sobre escritura de mtodo Parmetros Valor de retorno Excepciones Modificadores acceso Invocacin de Deben cambiar. Puede cambiar el tipo. Pueden cambiar. Pueden cambiar El tipo de la referencia determina que mtodo invocar. No deben cambiar. No puede cambiar, salvo por alguna covariante (subclass). Pueden reducirse o eliminarse. No se pueden lanzar nuevas excepciones u otras ms abarcativas. No pueden ser ms restrictivos (pueden ser menos restrictivos). El tipo del objeto determina que mtodo invocar. Sucede en tiempo de ejecucin.

Java World Captulo 1

12

Casteo de variables de referencia


En ciertas ocasiones, es necesario utilizar un mtodo de la clase especfica (subclase), pero la referencia es de la superclase. En estos casos se utiliza un casteo denominado downcast. El problema con este tipo de casteos, es que no generar errores en tiempo de compilacin, pero pueden generarlos en tiempo de ejecucin. public class Generic () { public void doSomething() { // . . . some code here } } public class Specific (){ public void doSomethingMoreSpecific() { // . . . some code here } } public class Program { static public void main (String[] args) { Generic g1 = new Specific(); Generic g2 = new Generic(); g1.doSomething(); g1.doSomethingMoreSpecific(); //Genera un error de compilacin "cannot find symbol", esto indica que la clase Generic no contiene un mtodo doSomethingMoreSpecific Specific s1 = (Specific)g1; s1.doSomethingMoreSpecific(); //En este caso, la instancia es de tipo Specific, de manera que conoce el mtodo doSomethingMoreSpecific g2.doSomething(); g2.doSomethingMoreSpecific(); //Genera un error de compilacin "cannot find symbol", esto indica que la clase Generic no contiene un mtodo doSomethingMoreSpecific s1 = (Specific)g2; //Se genera un error en tiempo de ejecucin "java.lang.ClassCastException" //Para prevenir esto en tiempo de ejecucin, antes de realizar el downcast verificamos que el objeto sea del tipo a castear if ( g2 instanceof Specific ) { //Como el objeto no es de tipo Specific, ni un subtipo del mismo, la sentencia if resulta false, y no se entra en la condicin, previniendo el error en tiempo de ejecucin s1 = (Specific)g2; s1.doSomethingMoreSpecific(); //Tambin se puede realizar un casteo directo como el siguiente ((Specific)g2).doSomethingMoreSpecific(); } } } Lo nico que el compilador verifica es que el tipo de la variable con el tipo a castear se encuentren en el mismo rbol de herencia. Lo que si puede generar un error de casteo es al intentar realizar un upcasting.

h t t p : / / g u s t a v o a l b e r o l a . b l o g s p o t . c o m

13

Java World Captulo 1

h t t p : / / v a l o r c r e a t i v o . b l o g s p o t . c o m

public class Generic {} public class Specific extends Generic{} public class Another {} public class Program { static public void main (String[] args) { Specific sp = new Specific(); Another an = new Another(); Generic s1 = (Generic)sp; Generic an = (Generic)an; //Error de compilacin al intentar realizar un upcasting "inconvertible types" //El upcasting tambin se puede escribir de la siguiente manera Generic s1 = sp; //Esta sintaxis automticamente est realizando un upcasting } } Tambin, puede darse un caso como el planteado a continuacin: public interface Doable { void doSomething(); } public class Generic implements Doable { public void doSomething() { //. . . some code here } } public class Specific extends Generic {} La clase Specific puede ser tanto de tipo: Specific, Generic, o Doable, dado que su superclase la implementa, y ya se hizo cargo de darle un cuerpo a los mtodos definidos en la interfaz.

Java World Captulo 1

14

Implementar (implements) una interfaz


Cuando se implementa una interfaz, lo que se hace es aceptar el contrato provisto por esta, e implementarlo en la clase. Para el compilador, lo nico que requiere es que se le d una implementacin legal al mtodo, pudiendo ser esta un cuerpo vaco por ejemplo ({}). Para que la implementacin de una interfaz sea legal, la primer clase no abstracta del rbol de herencia debe cumplir con las siguientes reglas: Especificar una implementacin concreta para todos los mtodos definidos en el contrato de la interfaz. Seguir todas las reglas para la sobre escritura de mtodos. Declarar sin excepciones controles sobre los mtodos de ejecucin distintos de los declarados por el mtodo de interfaz, o subclases de los declarados por el mtodo de interfaz. Mantener la misma firma del mtodo, y devolver un valor del mismo tipo (o subtipo).

Tipos de valor de retorno vlidos


Esta seccin implica dos cosas: Lo que se puede declarar como un valor de retorno. Qu tipo de dato se puede devolver realmente como valor de retorno.

Declaracin de tipos de valor de retorno (Return types declaration)


Esta seccin indica que tipo de valor de retorno puedes escribir en la declaracin del mtodo, dependiendo si se trata de un mtodo: Sobrecargado Sobre escrito Nuevo

Tipos de valor de retorno en mtodos sobrecargados


El tipo de valor de retorno puede ser cualquiera (el mtodo debe calificar para la declaracin de sobrecarga).

Tipos de valor de retorno en mtodos sobre escritos


Se puede especificar el mismo tipo, o un subtipo (sublass), como tipo de valor de retorno (el mtodo debe calificar para la declaracin de sobre escritura). NOTA: esto es posible a partir de Java 5, en versiones anteriores, solo es posible utilizar el mismo tipo.

Devolviendo un valor
Solo existen seis reglas: Puedes devolver un null cuando el tipo es un objeto. Un array representa un tipo de dato valido como retorno. En un mtodo con un valor de retorno de tipo primitivo, es posible devolver un tipo de dato de otro tipo, que sea casteado implcitamente al tipo de retorno. Idem anterior con un tipo que puede ser casteado explcitamente (se debe realizar el cast antes de devolver el valor). Si el tipo es void, el mtodo no puede contener ningn return. Si el tipo es un objeto, se puede devolver cualquier objeto que sea del mismo tipo o que pertenezca al rbol de herencia (no superclases ni superiores). Cualquier tipo que pase la condicin instanceof del tipo de valor de retorno es vlido.

h t t p : / / g u s t a v o a l b e r o l a . b l o g s p o t . c o m

15

Java World Captulo 1

Constructores e instanciacin h t t p : / / v a l o r c r e a t i v o . b l o g s p o t . c o m
Los objetos son construidos. No es posible construir un nuevo objeto, sin antes invocar el constructor. Los constructores representan bloques de inicializacin, los cuales pueden llegar a ser invocados con el operador new (no es el caso de los bloques de inicializacin estticos).

Conceptos bsicos de los constructores (Constructor basics)


Toda clase, incluidas aquellas que sean abstractas, debern de tener un constructor. Pero esto no implica que el programador tenga que especificarlo.

Llamadas en cadena a constructores (Constructor chaining)


Suponiendo el siguiente rbol de herencia: Clase Especifico Clase Generico Clase Objeto

Al invocar la creacin de un objeto de tipo Especifico, el proceso de inicializacin es el siguiente: 1. 2. 3. 4. 5. 6. 7. 8. Se invoca el constructor se Especifico. Este invoca el constructor de Generico (esta invocacin puede ser implcita o explcita). Se invoca el constructor de Generico. Este invoca el constructor de Objeto (esta invocacin es siempre implcita). Las variables de instancia del objeto Objeto reciben sus valores explcitos. Se ejecuta el constructor de Objeto. Las variables de instancia del objeto Generico reciben sus valores explcitos. Se ejecuta el constructor de Generico. Las variables de instancia del objeto Especifico reciben sus valores por defecto. Se ejecuta el constructor de Especifico.

Reglas de los constructores (Rules for constructors)

Las siguientes reglas representan las bases de los constructores, y sern necesarias para rendir el examen.

Los constructores pueden utilizar cualquier modificador de acceso. El nombre del constructor debe ser igual al de la clase. Los constructores no deben de tener un valor de retorno. Es legal tener un mtodo que tenga el mismo nombre que la clase. Siempre que este tenga un valor de retorno, es un mtodo. Si no se especifica explcitamente un constructor en la clase, implcitamente se genera un constructor que no recibe parmetros. Si se especifica al menos un constructor, el constructor implcito no ser generado, de manera que si es necesario un constructor con argumentos, y el por defecto, es necesario especificarlo explcitamente. Todos los constructores tienen en la primer lnea, una llamada a un constructor sobrecargado (this()), o una llamada a un constructor de la superclase (super()).

Java World Captulo 1 La llamada a un constructor de la superclase puede ser con o sin argumentos. Un constructor sin argumentos no es necesariamente un constructor por defecto (este es el que especifica el compilador, en caso de no declarar explcitamente ningn constructor). No es posible acceder a una variable de instancia, o mtodo de instancia, hasta que se ejecute el constructor de la superclase. Solo variables y/o mtodos estticos pueden ser llamados al invocar un constructor mediante this() o super(). Las clases abstractas tambin tienen constructores, y estos son ejecutados cuando se instancie una subclase. Las interfaces no tienen constructores. Las interfaces no forman parte del rbol de herencia. La nica manera de invocar un constructor es desde otro constructor.

16

Determinar cundo se crear el constructor por defecto


El constructor por defecto ser creado por el compilador, siempre que no se haya declarado ningn constructor en la clase.

Como es el constructor por defecto?


Tiene el mismo modificador de acceso que la clase. No recibe ningn argumento (no tiene parmetros en su definicin). Llama al constructor de la superclase sin argumentos.

Qu pasa si el constructor de la superclase requiere argumentos?


Es necesario crear explcitamente los constructores en la clase, y dentro de la implementacin de estos, llamar al constructor de la superclase pasando los argumentos necesarios.

Sobrecarga de constructores
Simplemente se comporta al igual que los mtodos. Para sobrecargar un constructor basta con declarar varios de estos con diferentes parmetros.

Regla absoluta de los constructores. La primer lnea de estos deber ser una llamada a super() o this() (pueden contener parmetros en la llamada, siempre que la llamada no la realice el compilador).

Alguno de los constructores de la clase deber de llamar a super(), y verificar que todos los dems constructores terminen yendo al que realiza dicha llamada.

h t t p : / / g u s t a v o a l b e r o l a . b l o g s p o t . c o m

17

Java World Captulo 1

Mtodos y variables estticos h t t p : / / v a l o r c r e a t i v o . b l o g s p o t . c o m


Todos los mtodos y atributos declarados con el modificador de no acceso static pertenecen a la clase y no al objeto (instancia de la clase). Para saber cundo debemos deberamos de crear un atributo o mtodo esttico, simplemente necesitamos saber si este requiere o no acceder a algn atributo de la clase (en el caso de los mtodos), o si debe ser un valor compartido para todos los objetos (en el caso de los atributos). Caractersticas de los atributos y mtodos estticos: No es necesario inicializar ningn objeto para poder acceder a estos. Los atributos estticos son compartidos por todos los objetos (en realidad son de la clase, y dado que el objeto pertenece a dicha clase, tambin tiene acceso a los atributos y mtodos de esta). Las variables estticas tienen la misma inicializacin por defecto que las variables de clase. Un mtodo esttico no puede acceder a ningn miembro no esttico (main es esttico!). No existe la sobre escritura (overriding) de mtodos estticos, pero si la sobrecarga (overloading).

Lo que se viene
En la prxima entrega estaremos adentrndonos en las asignaciones. Veremos que clases de literales existen en el mundo de Java, y como utilizar cada uno de ellos, as como sus compatiblidades e incompatibilidades. Aprenderemos a inicializar y utilizar arrays, matrices, e hipermatrices. Como referenciarlos y acceder a cada uno de sus elementos. Descubriremos bloques de inicializacin de clase y objeto. Y conoceremos sobre las clases Wrapper de Java que existen para cada tipo de valor primitivo.

Accediendo a mtodos y variables estticas


Dado que podemos acceder a miembros estticos sin siquiera haber instanciado una clase, para referenciarlos, utilizamos el nombre de la clase con el . para acceder. public class Generic { static public int numero = 0; } public class Specific extends Generic { static public int numero = 1; static public void main (String[] args) { int tmp = Specific.numero; //Nomenclatura utilizada para acceder a miembros estticos (NombreClase.Miembro) Generic c = new Specific(); //Es vlido por el compilador. Utiliza los miembros estticos del tipo de dato declarado. tmp = c.numero(); //En este caso, el valor al que se accede es el 0 } } En caso de utilizar un identificador que no sea el nombre de la clase (una variable de referencia), se accede a los miembros estticos del tipo declarado de la referencia (no el tipo real contenido).

Java World Captulo 1

18

h t t p : / / g u s t a v o a l b e r o l a . b l o g s p o t . c o m

También podría gustarte