4

Click here to load reader

Clases y subclases

Embed Size (px)

Citation preview

Page 1: Clases y subclases

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

Page 2: Clases y subclases

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

Page 3: Clases y subclases

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

Page 4: Clases y subclases

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