Curso JAVA
Unidad 3: "Clases,
objetos, herencia y polimorfismo"
Objetivos de la Unidad:
Nota: El material que viene a continuaci�n debe servir de repaso o referencia para quien conozca C++ y programaci�n orientada a objetos y entenderlo podr�a servir como objetivo para quien no tenga estos conocimientos.
Clases
int
x;
int y;
int r;
// m�todos
public
double area()
{
return Math.PI * Math.pow(r,
2);
}
}
Tipos
�mbitos
Sobrecarga de
m�todos
<Nom. clase>.<Nom. m�todo>@<Tipo
par�metro 1>@<Tipo par�metro 2>...
Circulo.area@void
Circulo.area@int
Orientaci�n a
objetos
Ejemplos de
constructores
public Circulo(Circulo
c)
{
this.x =
c.x;
this.y = c.y;
this.r = c.r;
}
Herencia
Motivaciones y
prestaciones de la herencia
Aspectos pr�cticos de la
herencia
ObjGraf
|
+----- Rectangulo
+----- Circulo
Polimorfismo
Clases abstractas
Ejemplo completo de polimorfismo
z[0] = new
Rectangulo(1, 5, 3, 4);
z[1] = new Circulo(1, 5,
10);
// Recorrido del
array e impresi�n de la area para cada uno de ellos
for (int i = 0; i < z.length; i++)
{
double sup = z[i].area();
System.out.println("Area de z[" + i + "]: " + sup);
}
}
}
//
//
//
ObjGraf.java
//
//
// ObjGraf representa al Rectangulo, al Circulo y al resto en
general.
// Se hace responsable de las caracter�sticas
comunes atodos ellos como la x y la y,
// tanto en lo
referente a los atributos como a los m�todos.
// Desde un
m�todo de otra clase se puede acceder a la x y la y mediante los
m�todos
// set y get correspondientes, los cuales son
p�blicos.
// El acceso directo a x a y desde sus clases
hijas (Rectangulo y Circulo) no est�
// permitido
por private. Para abrir la posibilidad de acceso a las clases hijas
pero
// no al resto de las clases existe el nivel
protected.
public abstract class
ObjGraf
{
private
int x; // coordenada x del centro
private
int y; // coordenada y del centro
// metodo
abstracto area
abstract public double
area();
// Constructor por defecto: El que da los valores por
defecto
// Es condici�n obligatoria para que la clase defina un "Java
Bean"
public ObjGraf()
{
setX(0);
setY(0);
}
public
ObjGraf(int xInicial, int yInicial)
{
setX(xInicial);
setY(yInicial);
}
// set y get de
la x
public void setX(int valor)
{
x = valor;
}
public int
getX()
{
return
x;
}
// set y get de
la y
public void setY(int valor)
{
y = valor;
}
public int
getY()
{
return
y;
}
}
//
//
// Rectangulo.java
//
//
public class Rectangulo
extends ObjGraf
{
// datos
de la clase o atributos
private int b; //
base
private int h; // altura
// Constructor
por defecto: El que da los valores por defecto
// Es condici�n
obligatoria para que la clase defina un "Java Bean"
public
Rectangulo()
{
// la ausencia de una llamada a super()
implica impl�citamente que �sta se realiza.
setBase(10);
setAltura(5);
}
// Los constructores son en general
public}
public Rectangulo(int xInicial, int yInicial, int baseInicial, int
alturaInicial)
{
// este
constructor inicializa los atributos validando
super(xInicial,
yInicial);
setBase(baseInicial);
setAltura(alturaInicial);
}
// m�todo
�rea
public double area()
{
return getBase() *
getAltura();
}
// set y get de
la altura
public void setAltura(int
valor)
{
if
(valor > 0)
{
h
= valor;
}
else
{
h
= 0;
}
}
public int
getAltura()
{
return
h;
}
// set y get de
la base
public void setBase(int
valor)
{
if
(valor > 0)
{
b
= valor;
}
else
{
b
= 0;
}
}
public int
getBase()
{
return
b;
}
}
//
//
// Circulo.java
//
//
public class Circulo
extends ObjGraf
{
// datos
de la clase o atributos
private int r; //
radio
//
Constructor por defecto: El que da los valores por defecto
// Es
condici�n obligatoria para que la clase defina un "Java Bean"
public
Circulo()
{
// la ausencia de una llamada a super() implica
impl�citamente que �sta se realiza.
setRadio(10);
}
// Los constructores son en general public
public Circulo(int xInicial, int yInicial, int
radioInicial)
{
// este
constructor inicializa los atributos validando
super(xInicial, yInicial);
setRadio(radioInicial);
}
// m�todo
�rea
public double area()
{
return 3.1416 * getRadio() *
getRadio();
}
// set y get de
la altura
public void setRadio(int
valor)
{
if
(valor > 0)
{
r
= valor;
}
else
{
r
= 0;
}
}
public int
getRadio()
{
return
r;
}
}
Interfaces: Cuando lo que se heredan son compromisos
Paquetes
package
ejemplos.polimorfismo;
// aqu� vendr�a al c�digo de la clase
Rectangulo del ejemplo
// anterior:
public class
Rectangulo
{ ...
Mac: cursojava:ejemplos:polimorfismo
Inner
classes
Distinguiremos dos tipos de inner
classes:
No an�nimas:
class
A
{
---
class
B
{
...
Desde el exterior el tipo B es
A.B
El fichero .class generado es A$B.class
An�nimas:
Es un mecanismo muy utilizado
para la impementaci�n de eventos en el nuevo modelo 1.1 para evitar tener que
implementar un interface para cada
listener.
Ejemplo:
...
button1.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent
e)
{
button1_actionPerformed(e);
}
});
...
En este caso se crea impl�citamente un
objeto de una subclase an�nima de ActionListener en la que se implementa el
m�todo actionPerformed y dicho objeto es pasado como par�metro a
addActionListener.
Si este c�digo forma parte de un formulario llamado
Frame1 se genera el fichero Frame1$1.class que corresponde a la clase
an�nima.x
Unidad anterior - Unidad siguiente
Copyright DENVIR STUDIOS �
Lima - Per�, 2002