Documentos de Académico
Documentos de Profesional
Documentos de Cultura
en java
Facilitadores:
Los
constructores Al heredar de
son utilizados, una clase
pero no base,
heredados. heredaremos :
• atributos
• métodos,
Mecanismo para extender clases
“Un La
objeto de tipo
relación
• Prueba de subclase debe ser
validez: “Es un”
también de tipo
superclase.”
Mecanismo para extender clases
Ejemplo:
Vehiculo
start(): void
extends
Coche
drive(): void
Ejemplo 2:
Variable de instancia
extends
Resultado:
Herencia
Miembros heredados
Explícita:
super(); o super(a,b); o …
Dependiendo de si el constructor al que invocamos
tiene o no argumentos
Miembros no heredados: Constructores
Miembros no heredados: Constructores
Referencias, tipos y subtipos
Una variable de referencia puede
referenciar objetos del mismo tipo de la
variable (esto ya lo sabíamos).
Ejemplo:
Persona p = new Persona();
Una variable de referencia puede
referenciar objetos de cualquier subtipo de
la variable.
Ejemplos:
Persona p = new Alumno();
Persona p = new Tesista();
Referencias, tipos y subtipos
clase Object, una variable de este tipo puede
referenciar
objetos de cualquier tipo. Ejemplos:
Object o = new Persona();
Object o = new Tesista();
Object o = new Lavadora();
Referencias, tipos y subtipos
En consecuencia, un arreglo de tipo Object puede
almacenar cualquier tipo de objeto en sus
posiciones:
Object[] arr = new Object[10];
arr[1] = new Persona();
arr[2] = new Tesista();
arr[3] = new Lavadora();
Una variable de referencia de un
determinado tipo NO puede referenciar
objetos de un supertipo.
Por
lo anterior, las siguientes asignaciones
NO son válidas:
Alumno a = new Persona();
Tesista t = new Alumno();
Tesista t = new Persona();
Operador instanceof y herencia
Ejercicio 5, 6 y 7
Polimorfismo
se reproduce ()
come()
duerme()
cambiaColor()
Métodos de Instancia Métodos de Clase
Accediendo a un método
sobreescrito de una Superclase
public class Superclass {
public void printMethod() {
Si su método System.out.println("Impreso en
sobreescribe Superclass.");
uno de los }
métodos de una }
class UseSuper {
public static void main(String args[]) {
class B extends A {
B subOb = new B(1, 2);
int i; // esta i oculta la i de A
subOb.imprimir ();
B(int a, int b) {
}
super.i = a; // i in A
}
i = b; // i in B
}
void imprimir () {
System.out.println("i en la superclase: " +
super.i);
System.out.println("i en la subclase: " + i);
}
}
Reglas para la sobrescritura
} }
}
Sobrecarga de métodos
En una subclase,
usted puede
sobrecargar el
Los métodos se método
diferencian por El tipo de valor heredado de la
el nombre del retornado no superclase.
Una clase método y forma parte de
puede tener --Tales métodos
cantidad, tipo, la firma del sobrecargados
más de un orden de sus método (no es
método con el no esconden ni
parámetros. utilizado para sobreescriben
mismo nombre distinguir entre
Esto constituye los métodos de
la firma del métodos) la superclase—
método solamente son
nuevos métodos,
únicos a la
subclase.
Ejemplo de sobrecarga
public class Electrodomestico{
Electrodoméstico
public boolean encender(){ Encender () : boolean
//hacer algo Apagar() : boolean
}
public boolean apagar(){
//hacer algo
}
} Tostadora
Encender(int nivel ):
public class Tostadora extends Electrodomestico{ boolean
• Ejemplo:
public Empleado(String nombre, double salario, Date fechaNac)
public Empleado(String nombre, double salario)
public Empleado(String nombre, Date fechaNac)
Cuando se declara un argumento para un método Java, se proporciona el nombre para ese
argumento.
Este nombre es utilizado dentro del cuerpo del método para referirse al valor del argumento.
Un argumento de un método puede tener el mismo nombre que una variable de la clase.
En este caso, se dice que el argumento oculta a la variable miembro.
Normalmente los argumentos que ocultan una variable miembro se utilizan en los constructores
para inicializar una clase.
Uso de this
Los nombres de argumentos ocultan los nombres de las variables miembro.
Por eso utilizar x, y o radius dentro del cuerpo de la función, se refiere a los argumentos, no a
las variables miembro.
Para acceder a las variables miembro, se las debe referenciar a través de this--el objeto actual.
classCircle{
intx, y, radius;
publicCircle(intx, inty, intradius) {
this.x= x;
this.y= y;
this.radius= radius;
}
}