Click here to load reader
Upload
martaferrari
View
1.976
Download
0
Embed Size (px)
Citation preview
Universidad Católica de Salta Clases y subclasesLenguajes II
Clases y subclases 1
El concepto de herencia conduce a una estructura jerárquica de clases o estructura de árbol, lo
cual significa que en la programación orientada a objetos todas las relaciones entre clases
deben ajustarse a dicha estructura. Se pueden definir nuevas clases basadas en clases existentes lo
cual facilita reutilizar código previamente desarrollado.
Java permite múltiples niveles de herencia pero no permite que una clase derive de varias, o sea
que cada clase tiene sólo una clase padre.
En Java, la clase padre de todas las clases es la clase Object y cuando una clase no tiene una
superclase explícita, su superclase es Object.
De manera automática una subclase hereda las variables y métodos de su superclase, además
una subclase puede agregar nueva funcionalidad (variables y métodos) que la superclase no tenía.
Los constructores no son heredados, pero sí llamados. Es decir, cuando se construye un objeto
de la clase derivada se llama al constructor de la clase derivada, pero antes de comenzar a ejecutarse
se llama al constructor de la clase base, que tras ejecutarse continua la ejecución del constructor de
la clase derivada.
Para crear una subclase, se incluye la palabra clave extends en la declaración de la clase.
Ejemplo
class nombreSubclase extends nombreSuperclase
{
}
En el siguiente ejemplo, las clases Administrativo y Docente heredan de la clase Empleado.
Empleado es la superclase, Administrativo y Docente son subclases. Empleado es una clase de la
que derivan 2 subclases. En cada una de las clases se mencionan las variables miembro y algunos de
sus métodos. En ninguna de ellas hay constructor por lo tanto se usan los constructores por defecto.
En la clase Docente se han incluido los métodos mostrarTodo1 y mostrarTodo2 para
ejemplificar el uso de la palabra super. Esta palabra reservada sirve para indicar que una variable o
un método es de la superclase.
1 Material sacado de Internet
C.C. Marta Ferrari1
Universidad Católica de Salta Clases y subclasesLenguajes II
public class Empleado /* SuperClase */
{ protected String nombre; // Importante: las variables nombre y fechIngreso protected long fechIngreso; //aaaammdd // llevan el calificador protected para que los // métodos de las subclases puedan acceder a ellos public void mostrarNombre () { System.out.print(nombre); System.out.print("\n"); }
public void mostrarFechaIngreso (){ System.out.print(fechIngreso % 100); System.out.print(" / "); System.out.print(fechIngreso/100 % 100); System.out.print(" / "); System.out.println(fechIngreso / 100);}
public void setNombre (String nom) { nombre = nom; } public String getNombre () {return nombre; }
public void setFechaIngreso (long fech){ fechIngreso = fech;}
}
C.C. Marta Ferrari2
EmpleadonombrefechIngreso
mostrarNombresetNombregetNombre
Administrativocategoríaturno
mostrarCategoriasetCategoriagetCategoria
Docentetitulo
mostrarTitulosetTitulogetTitulomostrarTodo1mostrarTodo2
Universidad Católica de Salta Clases y subclasesLenguajes II
public class Administrativo extends Empleado /* SubClase */{ private int categoria; private char turno; public void mostrarCategoria () { System.out.print(categoria); System.out.print("\n"); }public void setCategoria (int cat) { categoria = cat; } public int getCategoria () {return categoria; } }
public class Docente extends Empleado /* SubClase */{ private String titulo; public void mostrarTitulo () { System.out.print(titulo); System.out.print("\n"); }
public void setTitulo (String tit) { titulo = tit; } public String getTitulo () {return titulo; }
public void mostrarTodo1 (){ System.out.print(titulo + ' '); // Importante: obsérvese el uso de la palabra super para super.mostrarNombre(); // llamar a los métodos de la superclase super.mostrarFechaIngreso(); }
public void mostrarTodo2 (){ System.out.print(titulo + ' '); System.out.print(nombre); System.out.print("\n");
C.C. Marta Ferrari3
Universidad Católica de Salta Clases y subclasesLenguajes II
System.out.print(fechIngreso % 100); System.out.print(" / "); System.out.print(fechIngreso/100 % 100); System.out.print(" / "); System.out.println(fechIngreso / 100); }
}
Nota: si las variables nombre y fechIngreso de la superclase se declaran con el calificador private en lugar de protected entonces para acceder a ellas se deben usar los métodos de la superclase. O sea si :
public class Empleado /* SuperClase */
{ private String nombre; // Importante: las variables nombre y fechIngreso private long fechIngreso; //aaaammdd // llevan el calificador private // Solamente los métodos de la clase tienen acceso . . .}
Entonces el método mostrarTodo2() de la clase Docentes debería hacerse así:
public void mostrarTodo2 (){ System.out.print(titulo + ' '); System.out.print( getNombre () ); // el nombre se consigue a través del método System.out.print("\n"); super.mostrarFechaIngreso(); }
C.C. Marta Ferrari4