Súper clases y subclases En muchos casos, un objeto de una clase es un objeto de otra clase también. Un rectángulo ciertamente es un cuadrilátero (Un cuadrilátero es un polígono de cuatro lados). Así pues, podemos decir que la clase rectángulo hereda de la clase cuadrilátero. En este contexto, la clase cuadrilátero es una súper clase y la clase rectángulo es una subclase. Un rectángulo es un tipo específico de cuadrilátero, pero no es correcto asegurar que un cuadrilátero es un rectángulo. A continuación, se muestran algunos ejemplos sencillos de herencia. Superclase Estudiante Figura Préstamo Empleado Cuenta Subclases EstudianteGraduado EstudianteDeLicenciatura Círculo Triágulo Rectángulo PréstamoParaAutomóvil PréstamoParaMejorarCasa PréstamoHipotecario Profesor Asistente CuentaDeAhorros CuentaCorriente Dado que la herencia produce subclases con mas características que sus superclases, los términos superclase y subclase pueden dar pie a confusiones. Sin embargo, hay otra forma de considerar estos términos que es muy lógica. Como cada objeto de una subclase es un objeto de una superclase, y dado que la que una superclase puede tener muchas subclases, el conjunto de objetos representado por una superclase normalmente es más grande que el conjunto de objetos representado por cualquiera de las subclases de esa superclase. Las relaciones de herencia forman estructuras jerárquicas similares a un árbol. Una superclase existe en una relación jerárquica con sus subclases. Sin duda, una clase puede existir sola, pero es cuando se emplea con el mecanismo de herencia que se convierte ya sea en una superclase que proporciona atributos y comportamientos a otras clases, o en una subclase que hereda dichos atributos y comportamientos. Desarrollemos una jerarquía de herencia sencilla. Una comunidad universitaria típica comprende miles de personas que son miembros de la comunidad. Estas personas consisten en empleados, estudiantes y exalumnos. Los empleados son docentes o bien personar auxiliar. Los miembros docentes pueden ser administradores (como el rector y los directores de departamentos) o profesores. Esto produce la siguiente jerarquía de herencia. Programación Orientada a Objetos I I Profesor: Julio Cesar Meza Ramírez Observe que la jerarquía de herencia podría contener muchas otras clases. Por ejemplo pueden ser de postgrado o de licenciatura. Hay abundantes ejemplos de jerarquías en el mundo real, pero nosotros no estamos acostumbrados a categorizar el mundo real de esta forma, por lo que necesitamos ajustar nuestra forma de pensar. De hecho, las personas dedicadas al campo de la biología ya tienen cierta práctica con las jerarquías. Todo lo que estudiamos en biología se agrupo en una jerarquía encabezada por los seres vivos, los cuales pueden ser plantas o animales, y así sucesivamente. Si queremos especificar que la clase Empleado se deriva ó hereda de la clase MiembroDeLaComunidad, la clase Empleado podría definirse en Java como sigue: class Empleado extends MiembroDeLaComunidad { … } Ejemplo: A continuación se muestra la forma de programar una herencia entre superclases y subclases. Desarrollando las clases del árbol jerárquico: Programación Orientada a Objetos I I Profesor: Julio Cesar Meza Ramírez Programamos la superclase: (CMiembro) public class CMiembro { String nombre; int cedula; int telefono; public CMiembro() { } void crearMiembro(String nom, int ced, int tel){ nombre=nom; cedula=ced; telefono=tel; } } Programación Orientada a Objetos I I Profesor: Julio Cesar Meza Ramírez Ahora programamos la subclase CDocente que hereda de la superclase CMiembro. public class CDocente extends CMiembro { int escalafon; int cod_docente; public CDocente() { } void crearDocente(int esc, int cod){ escalafon=esc; cod_docente=cod; } } Seguimos con la subclase CProfesores que hereda de la subclase CDocente que a su vez hereda de la superclase CMiembro. public class CProfesores extends CDocente { String materia; int grupo; String jornada; public CProfesores() { } void crearProfesor(String mat, int grup, String jor){ materia=mat; grupo=grup; jornada=jor; } } Programación Orientada a Objetos I I Profesor: Julio Cesar Meza Ramírez Después de crear todas las clases, procedemos a crear los objetos desde la clase “main”. public class Main { public Main() { } public static void main(String[] args) { //crear miembro CMiembro objMiembro=new CMiembro(); objMiembro.crearMiembro("Maria", 4564, 4588); System.out.println(""+objMiembro.nombre); // crear docente CDocente objDocente=new CDocente(); objDocente.crearMiembro("Carlos", 30298675, 3014567); objDocente.crearDocente(10,567); System.out.println(""+objDocente.nombre); //crear profesor CProfesores objProfesor=new CProfesores(); objProfesor.crearMiembro("Andres", 34556, 311603); objProfesor.crearDocente(12, 568); objProfesor.crearProfesor("Programación", 2, "Diurna"); System.out.print(""+objProfesor.nombre); } } Taller en clase: Según el árbol jerárquico descrito anteriormente, diseñar las clases restantes y realizar su codificación. Programación Orientada a Objetos I I Profesor: Julio Cesar Meza Ramírez