Se crea una clase Persona con tres atributos p�blicos b�sicos : nombre, edad y estatura.
class Persona
{
public String nombre;
public int edad;
public double estatura;
}
En el programa de prueba se crear� en memoria un objeto de tipo Persona con la instrucci�n :
Persona p = new Persona( );
En memoria se ha reservado el espacio necesario para almacenar el objeto.
Cada objeto en Java se almacena en una direcci�n de memoria determinada. Supongamos que
la variable creada se guarda en la direcci�n 1200.
Por lo tanto p almacena solamente la direcci�n 1200. Al accesar los campos a trav�s de p se
est� llendo a la direcci�n se�alada y rescatando los atributos seg�n d�nde est�n.
En consecuencia si temenos una variable temp de tipo Persona que almacena la misma direcci�n , se puede
tener acceso a los campos de p a trav�s de temp.
Ej :
/* temp en este momento, almacena null ya que todav�a
no se ha creado objeto alguno */
Persona temp;
/* se crea un nuevo objeto en la direcci�n 3900 , por lo tanto
p almacena 3900 */
Persona p = new Persona( );
/* se asigna al objeto p una de edad de 5 */
p.edad = 5;
/* se asigna a temp, la direcci�n de p (3900) */
temp = p;
/* se va a la direcci�n 3900 y se accede al atributo edad */
temp.edad = 12;
/* lo anterior es lo mismo que haber hecho p.edad = 12 , por lo tanto
la siguiente instrucci�n imprime 12 */
System.out.println("edad : " + p.edad);
|
Programa de prueba
Se crear� un objeto de tipo Persona , para inicializar sus campos con los siguientes
datos : |
C�digo fuente
class prueba1
{
public static void impDatos(Persona aux)
{
System.out.println("\n\n Datos personales");
System.out.println(" ----------------\n");
System.out.println(" nombre : " + aux.nombre);
System.out.println(" edad : " + aux.edad);
System.out.println(" estatura : " + aux.estatura);
}
public static void main(String arg[ ])
{
Persona p = new Persona( );
p.nombre = "Thomas J. Watson";
p.edad = 65;
p.estatura = 1.78;
impDatos(p);
/* temp es una referencia al objeto p */
Persona temp = p;
/* como temp apunta a p , la siguiente instrucci�n es
similar a : p.edad++; */
temp.edad++;
/* Ahora James tiene un a�o mas de vida */
impDatos(p);
System.out.println( );
}
}
Constructores y referencia this
Un constructor, b�sicamente inicilializa los atributos de nuestro objeto.
Cuando no se declara expl�citamente un constructor , los atributos se inicializan por defecto.
En la clase siguiente se crear�n tres constructores diferentes, seg�n qu� atributos nos interesa inicializar con un valor espec�fico.
class Libro
{
public String titulo;
public String autor;
public int paginas;
public int precio;
/* constructores */
}
El primer constructor recibe como par�metro el t�tulo del libro.
public Libro(String aux_titulo)
{
titulo = aux_titulo;
}
El segundo constructor, recibe como par�metros el t�tulo y el autor del libro. Cuando los par�metros se llaman igual que los atributos del objeto, se usa la referencia this que hace referencia sobre el objeto actual, no permitiendo la confusi�n de nombres.
public Libro(String titulo , String autor)
{
this.titulo = titulo;
this.autor = autor;
}
Por �ltimo, el tercer constructor permite inicializar todos los atributos. Para ahorrar c�digo, se hace una llamada al segundo constructor mediante la referencia this , para inicilizar los atributos t�tulo y autor.
public Libro(String titulo , String autor, int paginas , int precio)
{
this(titulo , autor);
this.paginas = paginas;
this.precio = precio;
}
Programa de prueba
Se crear�n tres objetos de tipo Libro usando los tres constructores , y se va a imprimir los atributos de los tres objetos.
class prueba2
{
public static void impLibro(Libro aux)
{
System.out.print("\n " + aux.titulo);
System.out.print("\t\t");
if (aux.autor != null)
System.out.print(aux.autor);
System.out.print("\t\t");
if (aux.paginas != 0)
System.out.print(aux.paginas);
System.out.print("\t\t");
if (aux.precio != 0)
System.out.print(aux.precio);
}
public static void main(String arg[ ])
{
Libro a = new Libro("Los miserables");
Libro b = new Libro("El contrato social","Rousseau");
Libro c = new Libro("La divina comedia","Dante",320,8900);
System.out.println("\n\n Titulo\t\t\tAutor\t\tPaginas\t\tPrecio");
System.out.println(" ------\t\t\t-----\t\t-------\t\t------");
impLibro(a);
impLibro(b);
impLibro(c);
System.out.println("\n");
}
}