Está en la página 1de 8

Ciclo de vida y clases internas

Tecnología de la Programación I
Ing. Zoraida Vidal Melgarejo, Mg.

Sobrecarga de métodos
– Varios métodos en una clase pueden tener el mismo nombre.
– Los métodos deben tener diferente tipo o número de
parámetros.

public class Pelicula {


public void setPrecio() {
precio = 3.50F;
}
public void setPrecio(float nuevoPrecio) {
precio = nuevoPrecio;
} … Pelicula peli1 = new Pelicula();
} peli1.setPrecio();
peli1.setPrecio(3.25F);

1
Uso de la referencia this
• Los métodos de instancia reciben un argumento llamado this,
que se refiere al objeto actual.
public class Pelicula {
public void setCategoria(String newCategoria){
categoria = newCategoria; this
}

titulo : null
void cualquierMetodo() { peli1 categoria: “PG”
Pelicula peli1 = new Pelicula();
Pelicula peli2 = new Pelicula(); titulo: null
peli1.setCategoria("PG"); … peli2 categoria: null

Inicialización de variables de instancia


– Las variables de instancia se pueden inicializar explícitamente
en la declaración.
– La inicialización sucede en la creación del objeto.
public class Pelicula {
private String titulo;
private String categoria = "G";
private int numDeOscars = 0;

– Todas las variables de instancia son inicializadas implícitamente


a valores por defecto dependiendo del tipo de dato.
– Una inicialización más compleja se debe poner en un
constructor.

2
Los constructores
– Para la inicialización apropiada, una clase debe proporcionar un
constructor.
– Un constructor es llamado automáticamente cuando el objeto es
creado:
• Generalmente declarado público
• Tiene el mismo nombre que la clase
• No especifica tipo de retorno
– El compilador provee un constructor sin parámetros si, y sólo si, no
se proporciona un constructor explícitamente.
• Si se proporciona cualquier constructor explícitamente, entonces
el compilador no genera un constructor sin parámetros.
5

Definición y sobrecarga de constructores


public class Pelicula {
private String titulo;
private String categoria = "PG";

public Pelicula() { La clase Pelicula ahora


proporciona dos
titulo = “El Rey León";
constructores.
}
public Pelicula(String nuevoTitulo) {
titulo = nuevoTitulo;
}
}
Pelicula peli1 = new Pelicula();
Pelicula peli2 = new Pelicula(“Titanic");
Pelicula peli3 = new Pelicula(“Matrix");
6

3
Compartiendo código entre los constructores
Pelicula peli2 = new Pelicula();

public class Pelicula {


Un constructor
private String titulo;
puede llamar a otro
usando this(). private String categoria;

public Pelicula() {
this("G");
}
public Pelicula(String nuevaCategoria){
¿Qué sucede categoria = nuevaCategoria;
aquí? }
}

Variables, métodos y clases final


– Una variable final es una constante y no puede ser modificada.
• Debe, por lo tanto, ser inicializada.
• Es a menudo declarada public static para uso externo.
– Un método final no puede ser sobrescrito a través de la herencia.
– Una clase final no puede ser heredada.

public final class Color {


public final static Color black = new Color(0,0,0);

}

4
Recolección de basura
– Cuando todas las referencias a un objeto se pierden, el objeto está
marcado para la recolección de basura.
– La recolección de basura libera la memoria que es utilizada por el
objeto.
– La recolección de basura es automática.
– No hay necesidad de que el programador haga cualquier cosa,
pero el programador puede opcionalmente llamar a System.gc();.

Usando el método finalize()


– Si un objeto utiliza un recurso tal como un archivo, entonces el
objeto debe poder liberarlo.
– Se puede proporcionar un método finalize() en esa clase.
– El método finalize() se llama momentos antes que el recolector
de basura.

public class Pelicula {



public void finalize() {
System.out.println(“Adios"); ¿Algún problema?
}
}

10

5
Las clases internas
– Clases que se definen dentro de otra clase.
– Fuerzan una relación entre dos clases.
– Son de cuatro tipos:
• Static
• Miembro
public class Externa { …
• Local class Interna { …
• Anónima }
}

Incluir la clase

11

Definición de clase interna static


– Definido en el nivel de la clase.
– Acceso sólo a los miembros estáticos de la clase externa.

public class Outer {

private static float varFloat = 3.50f;


private String varString;

static class InnerStatic {

}

}

12

6
Definición de la clase interna miembro
– Definido en el nivel de la clase.
– Son necesarias instancias de la clase externa
– La palabra clave this se utiliza para tener acceso a la instancia
externa
public class Outer {

private static float varFloat = 3.50f;


private String varString;
...
class InnerMember {
...
outer.this
...
}
...
}
13

Definición de la clase interna local


– Definido en el nivel de la clase.
– Se declaran dentro de un bloque del código.
– Se tiene acceso sólo a las variables finales.
– No pueden tener un constructor.
public class Externa {
...
public void metodoExterno(final int var1){
final int var2=5; ...
class InternaLocal {
private int localVar = var1 + var2; ...
}
}
}

14

7
Definición de una clase interna anónima
– Definido en el nivel de los métodos.
– Se declaran dentro de un bloque del código.
– Evita el uso de las palabras reservadas de class, extends e
implements.
– No pueden tener un constructor.
public class Externa {
...
public void metodoExterno(){
AlgunaClase obj = new AlgunaClase();
...
obj.algunMetodo(
// creación de la clase anónima
new ListSelectionListener() {
// implementación de métodos
public void valueChanged( … ) { …}
} // fin de la clase anónima
); // fin de la llamada
...
}// fin del método 15
}// fin de la clase externa

También podría gustarte